2015-06-29 14 views
0

加载栏有问题。 我有一个名为site.php的文件,load.js和file.php 我的系统读取一个excel文件,并提取一个数组中的数据,我想显示读取行的excel文件的进度,但不是上传Excel文件。使用PHP,HTML和Bootstrap加载栏

我site.php

<!DOCTYPE html> 
<html lang="en"> 
<head> 
     <meta charset="UTF-8"> 
     <title>Document</title> 
     <link href="css/bootstrap/css/bootstrap.min.css" rel="stylesheet"> 
     <script type="text/javascript" src="js/jquery.js"> 
     </script> 
    </head> 
    <body> 
    <div class="progress" style="width:90%; margin:20px auto;"> 
     <div id="barra_progreso" class="progress-bar progress-bar-danger progress-bar-striped active" role="progressbar" aria-valuenow="1" aria-valuemin="0" aria-valuemax="100" style="width: 0%"> 
     <span class="sr-only"></span> 
     </div> 
    </div> 
    </body> 
    </html> 

load.js

var datos = new FormData(); 
    datos.append('excel', file); 
    $.ajax({ 
     url: 'file.php', 
     type: 'POST', 
     data: datos, 
     processData: false, 
     contentType: false 
    }).done(function(r) { 
     $("#msgOK").html(r); 
} 

file.php

$cant = $excel->getRow() + 1; 
    sleep(1); 
    echo "<script type='text/javascript'> 
    $(function() { 
var progressbar = $('#barra_progreso'), 
    **max = 25**, 
    value = 0; 
var loading = function() { 
    value += 1; 
    addValue = progressbar.val(value); 
    if (value <= (1/3 * max)) { 
     progressbar.addClass('progress-bar-danger') 
    } else if (value <= (2/3 * max)) { 
     progressbar.removeClass(' progress-bar-danger '); 
     progressbar.addClass('progress-bar-warning') 
    } else { 
     progressbar.removeClass('progress-bar-warning'); 
     progressbar.addClass('progress-bar-success') 
    } 
    var porc = (value/max) * 100; 
    var valor = parseFloat(Math.round(porc * 100)/100).toFixed(2); 
    progressbar.css({ 
     width: porc + '%' 
    }); 
    progressbar.html(valor + '%'); 
    if (value == max) { 
     clearInterval(animate); 
     alert('carga completada'); 
    } 
}; 
var animate = setInterval(function() { 
    loading(); 
}, 1000); 

});

</script>"; 

     flush(); 

     ob_flush(); 

每个函数的工作不错,但Excel文件的读取后显示的负载杆,我知道行为是由于在ajax.done,打印我的Excel文件,并用这个值我的最大的rownum在加载栏中工作。任何方式来解决这个问题?

回答

0

你需要做的是让两个进程同时运行。

一个上传文件并提取数据,另一个检查该动作的状态。所以你可能已经完成了第一个。

要做第二个,你需要记录上传的状态,进入会话可能是最简单的,只要它不会与其他任何东西冲突。然后用AJAX设置一个计时器来不断地调用一个PHP脚本,它从会话中获取状态并返回它,它应该是一个非常短的脚本。

然后你使用这个检索到的数据来更新你的进度条。