<html> 
 
<head> 
 
    <style> 
        body{ 
            height: 100%; 
            width: 100%; 
            background: lightcyan repeat; 
            margin: 0; 
            padding: 0; 
        } 
        #container{ 
            position: relative; 
            width: 100%; 
            height: 70%; 
        } 
        #content{ 
            position: absolute; 
            top: 50%; 
            left: 50%; 
            transform: translate(-50%, -50%); 
        } 
        #status{ 
            position: fixed; 
            overflow: auto; 
            height: 30%; 
            bottom: 0; 
            width: 100%; 
            border: 1px solid black; 
            padding: 0; 
            margin: 0; 
        } 
        .loader{ 
            display: none; 
        } 
        table#file-list td{ 
            padding: 3px 12px 3px 12px; 
        } 
        table#file-list, 
        table#file-list td { 
            border: 1px solid black; 
        } 
        td.percent{ 
            background-image: url("/img/progress.gif"); 
            background-repeat: no-repeat; 
            background-size: 100% 100%; 
            background-position-x: -100px; 
            width: 79px; 
            text-align: right; 
        } 
    </style> 
    <script type="text/javascript" src="https://code.jquery.com/jquery-1.11.3.min.js"></script> 
</head> 
 
<body> 
 
<div id="container"> 
    <div id="content"> 
        <table id="file-list"> 
            <thead> 
                <tr> 
                    <td>(i)</td> 
                    <td>File</td> 
                    <td>Size</td> 
                </tr> 
            </thead> 
            <tbody></tbody> 
        </table> 
        <input id="start-task" type="button" value="Start copy" task="1"> 
    </div> 
</div> 
 
<div id="status"> 
 
</div> 
 
</body> 
 
<script> 
 
    var fileList = [];   // contains the list of files that user has in our server 
 
    function logMessage(message){ 
        if ($("#status").html().length > 1000) { 
            $("#status").html(message+"<br/>"); 
        }else{ 
            $("#status").append(message+"<br/>"); 
        } 
 
    } 
 
    function updateFileList(){ 
        // fetch the list from the server, here simulating some random data 
        <?php for($i=0;$i<10;$i++) echo "\t".'fileList.push({ name:"'.uniqid('file-').'.ext", size: '.(10*rand(100,200)).'});'."\n"; ?> 
 
        var content = ""; 
        for(var i=0;i<fileList.length; i++){ 
            var file = fileList[i]; 
            content += '<tr id="file-'+i+'">'+ 
                    '<td><img src="img/loader.gif" class="loader"/></td>'+ 
                    '<td>'+file.name+'</td>'+ 
                    '<td class="percent">'+file.size+'</td>'+ 
                '</tr>'; 
        } 
        $("#file-list tbody").html(content); 
    } 
 
    function requestStatusOfFile(id) { 
        $.ajax({ 
            url: '/status-copy.php', 
            data: { 
                id: id, 
                _task: "copy" 
            }, 
            cache: false, 
            scope: this, 
            type: "POST", 
            success: function(data) { 
                if (data.result){ 
                    if (data.status == "done") { 
                        $("#file-" + id + " .loader").attr("src", "/img/checkmark.png"); 
                        $("#file-" + id +" td.percent").css("background-position-x", "-100px"); 
                        if (id<fileList.length-1) { 
                            setTimeout(function() { requestCopyOfFile(id+1); }, 600); 
                        } 
                    }else{ 
                        var percent = parseInt(data.percent); 
                        $("#file-" + id +" td.percent").css("background-position-x", "-"+(100-percent)+"px"); 
                        setTimeout(function() { requestStatusOfFile(id); }, 1500); 
                    } 
                }else{ 
                    $("#file-" + id + " .loader").attr("src", "/img/alert.png"); 
                    $("#file-" + id +" td.percent").css("background-position-x", "-100px"); 
                    logMessages(data.reason); 
                } 
            } 
        }) 
    } 
 
    function requestCopyOfFile(id){ 
        logMessage("requesting copy of file "+fileList[id].name); 
        $.ajax({ 
            url: '/copy.php', 
            data: { 
                id: id, 
                file: fileList[id], 
                _task: "copy" 
            }, 
            cache: false, 
            scope: this, 
            type: "POST", 
            success: function(data) { 
                if (data.result) { 
                    $("#file-" + id + " .loader").show(); 
                    setTimeout(function() { requestStatusOfFile(id); }, 1500); 
                }else { 
                    logMessage(data.reason); 
                } 
            }, 
            error: function(){ 
                logMessage(data.reason); 
            } 
        }); 
    } 
 
    var interval = 0; 
    var id = 0; 
 
    $(function(){ 
        logMessage("Welcome to asynchronous server side task demo"); 
 
        updateFileList(); 
 
        $("#start-task").click(function(e){ 
            e.preventDefault(); 
 
            $(this).hide(); 
 
            console.log("starting copy..."); 
            requestCopyOfFile(0); 
 
            return false; 
        }) 
    }) 
</script> 
 
</html> 
 
 |