AJAX请求等待另一个请求完成

时间:2017-01-08 03:29:48

标签: php jquery ajax


我试图用AJAX显示安装进度 我的PHP代码如下所示:

if($method == "install"){
  $_SESSION['progress']="step 1";
  $obj->thisTakesAboutAMinute();
  $_SESSION['progress']="step 2";
  $obj->thisTakesAboutAMinute();
  .
  .
  .
}else if($method == "getProgress"){
  echo($_SESSION['progress']);
}

当页面加载时我为" getProgress"设置间隔功能

setInterval(function(){
     $.ajax({
       method: "POST",
       url: "./scripts/script.php",
       async: true,
       data: {method: "getProgress"}
     }).done(function( msg ) {
       $("#message").html(msg);
     });
   }, 1000);

和"安装"按下按钮后调用。

$.ajax({
     method: "POST",
     url: "./scripts/script.php",
     async: true,
     data: {method: "install"}
 });

问题在于,当我开火"安装"请求" getProgress"请求停止返回,直到"安装"完成然后立即返回。
https://postimg.org/image/hj72qdnhr/
知道发生了什么事吗?

2 个答案:

答案 0 :(得分:0)

很难得到确切的进展,因为存在很多不确定因素,脚本执行时间,网络延迟和浏览器处理时间等等,所有这些都是不稳定的。

答案 1 :(得分:0)

将代码放在success函数内。因为完成函数总是在完成ajax调用后执行。所以你想等待第二次ajax调用...所以

setInterval(function(){
     $.ajax({
       method: "POST",
       url: "./scripts/script.php",
       async: true,
       data: {method: "getProgress"},
       success:function(msg){
       $("#message").html(msg);
         }
     });
   }, 1000);

希望它能奏效。