在一个脚本中有两个$ .ajax()调用

时间:2010-04-15 13:33:46

标签: jquery method-chaining

我想显示服务器端程序的一些进度信息(实际上是一个ffmpeg重新编码)。 我最好的方法是使用两个不同的$ .ajax()调用myscript,如下所示:

1)当提交表单(会触发重新编码)时,一个$ .ajax()将开始重新编码,如下所示:

   $.ajax({  
    type: "GET",  
    url: "runffmpeg.php",  
    data: dataString,  
    success: function(data, textStatus, XMLHttpRequest) {  
            //clearInterval(repeat);
            location.reload(); 
        }});

2)然后,第二个$ .ajax()调用将开始观察结果文件的大小,以便通知访问者进度,如下所示:

    $.ajax({  
        type: "GET",  
        url: "checkprogress.php",  
        data: dataString,  
        success: function(data, textStatus, XMLHttpRequest) {                   
                $('#submitted').html(data);
            }
    });

实际上,我应该在1秒钟的setInterval内进行此调用以显示进度。

当然这不起作用(或者为什么我应该发布它)并且我找不到任何同时有2个ajax调用的参考。

2 个答案:

答案 0 :(得分:2)

同时进行两次ajax调用是完全可以接受的。 但是我会使用setInterval,因为如果返回需要的时间超过一秒,你最终可能会多次调用checkprogress.php。你最好让成功方法启动一个新的ajax请求,可能是在超时后,例如:

function checkProg(){
  $.ajax({  
      type: "GET",  
      url: "checkprogress.php",  
      data: dataString,  
      success: function(data, textStatus, XMLHttpRequest) {                   
              $('#submitted').html(data);
              if (/* not yet complete */) {
                setTimeout(checkProg,500);
              }
          }
  });
}

答案 1 :(得分:0)

同时有多少个ajax请求可以处于活动状态。这取决于浏览器,应该接近3.我相信可以同时激活两个请求,但不建议这样做。

我建议重新设计您的服务器代码,以便立即回复表单提交,确认接收命令。然后使用轮询显示进度。