Javascript 如何在未完成时从ajax触发的PHP调用中获取更新?

Javascript 如何在未完成时从ajax触发的PHP调用中获取更新?,javascript,php,jquery,ajax,event-handling,Javascript,Php,Jquery,Ajax,Event Handling,有没有一种方法可以在PHP进程尚未完成且被ajax调用时从中获取更新?我所说的更新是指PHP脚本的刷新输出 var proc; $('#start').click(function () { proc = $.ajax({ type: 'POST', url: 'execute.php', // getData function that will get me updated data getData: function

有没有一种方法可以在PHP进程尚未完成且被ajax调用时从中获取更新?我所说的更新是指PHP脚本的刷新输出

var proc;
$('#start').click(function () {
    proc = $.ajax({
        type: 'POST',
        url: 'execute.php',
        // getData function that will get me updated data
        getData: function (update){
            alert(update);
        }
    });
});
更新: 假设我们想在这结束之前得到回音

execute.php

<?php
$progress = 0;
while(1){
    $progress++;
    echo $progress;
    flush();
    sleep(5);
    if($progress == 100){
        break;
    }
}
?>
execute.php

<?php
$coco = 0;
function sendMsg($msg, &$coco) {
    echo "id: " . $coco . "\n";
    echo "data: " . $msg;
    echo "\n";
    echo "\n";
    ob_flush();
    flush();
    $coco++;
}

header("Content-Type: text/event-stream");
header("Cache-Control: no-cache");
$progress = 0;
while(1){
    sendMsg($progress++, $coco);
    ob_flush();
    flush();
    sleep(5);
    if($progress == 100){
        break;
    }
}
?>

我过去曾为此()使用服务器发送事件。Internet Explorer不受开箱即用的支持,但有一些多边形填充可以解决此问题


我认为WebSocket也有类似的功能,但我自己并没有这方面的经验。

当成功从服务器加载文件时,可以使用Ajax回调

$('#start').click(function () {
    proc = $.ajax({
        type: 'POST',
        url: 'execute.php',
        success: function (respon){
            //do what u want to do here.
            if(respon.status == 0){
              alert("failed");
            }
            else{
              alert("ok");
            }
        },
        error: function(xhr, error){
           //for error handling
        }
    });
});
在php中,您可以响应您想要显示的内容

<?php
  $var["status"] = 0;
  //if(your condition){ $var["status"] = 1;}
  return json_encode($var);
?>


有关更多信息,请参见和

,您不理解此php脚本没有完成的问题。我想在它完成之前从中得到一个变量。我一直在更新我的答案,你的意思是这样的吗?您可以从php以json的形式返回变量,并在Ajax函数的成功回调中获得它。在thtat PHP脚本中,我有一个名为$process的变量。在执行5秒之后,有没有一种方法可以在PHP结束执行之前检索该变量。成功会在PHP脚本完成时触发,这意味着它将在这20秒之后触发。我想获得缓冲区,例如,当php执行时,每1秒一次。你能发布你的完整脚本吗?快速信息如何通知长时间运行的部分?@nerdlyist你能重新措辞吗?你想将快速发生的事情发送回页面。这段数据是否用于长时间运行的进程?是的,例如,长进程(PHP脚本)运行时,加载屏幕上会显示100%的条形图。这就是进展。所以你想启动一个过程,然后返回中间状态,即进展有多远?如果是这样的话,你可能想在问题中更直接地给出这些信息……我想我要找的是你有什么例子可以分享吗?
<?php
  $var["status"] = 0;
  //if(your condition){ $var["status"] = 1;}
  return json_encode($var);
?>