【问题标题】:Having two $.ajax() calls in one script在一个脚本中有两个 $.ajax() 调用
【发布时间】:2010-04-15 13:33:46
【问题描述】:

我想显示一些服务器端程序的进度信息(实际上是一个 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);
            }
    });

实际上这个调用 I 应该在 1 秒的 setInterval 时间段内进行,以便显示进度。

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

【问题讨论】:

  • 你有错误吗?究竟是什么不工作?

标签: jquery method-chaining


【解决方案1】:

同时进行两个 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);
              }
          }
  });
}

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-30
      • 1970-01-01
      • 1970-01-01
      • 2010-12-24
      相关资源
      最近更新 更多