0

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

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 调用的参考。

4

2 回答 2

2

同时进行两个 ajax 调用是完全可以接受的。但是,我不会使用setInterval,因为如果返回的时间超过一秒,您最终可能会多次调用 checkprogress.php。你最好让success方法启动一个新的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);
              }
          }
  });
}
于 2010-04-15T16:26:30.497 回答
0

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

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

于 2010-04-15T13:38:36.203 回答