用于长时间运行MySQL操作的PHP Ajax jQuery UI Progressbar

用于长时间运行MySQL操作的PHP Ajax jQuery UI Progressbar,php,jquery,mysql,ajax,jquery-ui-progressbar,Php,Jquery,Mysql,Ajax,Jquery Ui Progressbar,我有一个PHP脚本,需要很长时间才能执行,因为每个操作都必须对另一个网站进行SOAP调用。我想添加一个progressbar指示器,以便可以看到此脚本的完成百分比 我认为实现这一点的方法是执行一个异步Ajax调用来执行PHP,然后执行另一个Ajax调用来更新完成百分比。但是我在把这些放在一起时遇到了很多问题 到目前为止,我只有以下几点: <script language='Javascript'> $().ready(init); function init() {

我有一个PHP脚本,需要很长时间才能执行,因为每个操作都必须对另一个网站进行SOAP调用。我想添加一个progressbar指示器,以便可以看到此脚本的完成百分比

我认为实现这一点的方法是执行一个异步Ajax调用来执行PHP,然后执行另一个Ajax调用来更新完成百分比。但是我在把这些放在一起时遇到了很多问题

到目前为止,我只有以下几点:

<script language='Javascript'>

$().ready(init);

function init() {       
    $.get('importStatement.php');           
}

$(function() {
$( "#progressbar" ).progressbar({
  value: 0
});
});

</script>

<div id="progressbar"></div>

$().ready(init);
函数init(){
$.get('importStatement.php');
}
$(函数(){
$(“#progressbar”).progressbar({
数值:0
});
});
输出完成百分比($i)的PHP脚本:

$current\u day=$date->today;
$days_to_read=45;
//滚动查看最近的$days\u to\u读取日期,并导入当天的对账单
对于($i=0;$i<$days_to_read;$i++){
$statement\u date=$date->convertToMysql($current\u day);
$bank->importStatement($statement\u date,true);
$percent=intval($i/($days_to_read-1)*100)。“%”;
//禁用缓存
标题('Last-Modified:'.gmdate('D,dm Y H:i:s')。'GMT');
标头('Cache-Control:无缓存,必须重新验证');
标题('Pragma:no cache');
标头('Expires:Mon,1991年7月26日05:00:00 GMT');//禁用IE缓存
标题('Content-Type:text/plain;charset=utf-8');
echo$i;
$current\u day=$date->decreaseDay($current\u day);
}

我之所以要争论,是因为输出进度的importStatement.php与进度条“断开连接”或无关。进度条需要此脚本的输入。有人能给我指点迷津吗?

我以前也用过这样的进度条(不确定这是不是最好的方法,但它对我很管用)

有另一个MySQL表来存储进度

启动实际报告时,在“进度”表中创建一个带有作业ID的条目。让长时间运行的PHP脚本不断更新“进度”表,而不是将进度回显到屏幕上。将AJAX进度条指向一个快速PHP脚本,该脚本接受作业ID并从数据库中回传进度

$current_day = $date->today;
$days_to_read = 45;
// Scroll through the last $days_to_read dates and import a statement for that day
for ($i = 0; $i < $days_to_read; $i++) {
    $statement_date = $date->convertToMysql($current_day);
    $bank->importStatement($statement_date, true);
    $percent = intval($i/($days_to_read-1) *100).  "%";
    // disable caching
    header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT');
    header('Cache-Control: no-cache, must-revalidate');
    header('Pragma: no-cache');
    header('Expires: Mon, 26 Jul 1991 05:00:00 GMT');  // disable IE caching
    header('Content-Type: text/plain; charset=utf-8');
    echo $i;    
    $current_day = $date->decreaseDay($current_day);
}