使用jQuery.ajax获取PHP脚本的进度

时间:2014-10-27 10:39:03

标签: php jquery ajax progress

我正在使用jQuery的ajax来运行以下的PHP脚本:

jQuery.ajax({
    type: "POST",
    url: "my_php_script.php",
    success: function( response ) {
        console.log(response);
    },
    error: function(){
        console.log('error is...');
    }
});

my_php_script.php遍历一个数组,并在每个产品上运行一个函数:

$count = count($array);
$i = 0;
foreach ($array as $item) {
    myFunction($item);
    $i++;
    if($i == $count){
        echo json_encode('all done and a success');
    }
}

这一切都有效,但脚本通常需要大约2-3分钟才能完成,因此我需要在观看者运行时显示进度。我怎么能这样做?

我可以通过添加

来获得循环的百分比
$percent = intval($i/$count * 100)."%";
echo json_encode($percent);

进入我的php循环:

$count = count($array);
$i = 0;
foreach ($array as $item) {
    myFunction($item);

    $percent = intval($i/$count * 100)."%";
    echo json_encode($percent);

    $i++;
    if($i == $count){
        echo json_encode('all done and a success');
    }
}

但是如何在我的jQuery ajax调用中获得此值?

2 个答案:

答案 0 :(得分:1)

$.ajax({
    url: path,
    xhrFields: {
        onprogress: function (e) {

        }
    },
    success: function (response) {

    }
});

发现这个例子希望它有所帮助。

答案 1 :(得分:0)

最后通过在一个唯一命名的文本文件中写入百分比来实现这一点,就像在我的数组循环中一样:

$percent = intval($i/$count * 100)."%";
$_text = file_get_contents($_file);
$_text = $percent;
file_put_contents($_file, $_text);

然后在我的html页面中,我每隔2秒检查一次文件的内容:

jQuery.get('file.txt?'+new Date(), function(data) {
    console.log(data);
}, 'text');

我确定这不是最佳方式,但要在有限的时间内完成这项工作,我能想到的就是这一切。希望它可以帮助其他人