将多个 AJAX 请求排队,等待响应而不冻结浏览器?

4 javascript queue ajax jquery

我正在编写一个脚本,我需要循环一组 AJAX 请求:

$('#fetchPosts').click(function(){ 

    for(var i=0; i < link_array.length; i++) {

        settings = {
           // some object not relevant
        }

        var status = main_ajaxCall(settings, i); // ajax call
     }
});

function main_ajaxCall(settings, i) {

   $.ajax({ 
     type: "POST",
     url: "../model/insert.php",
     data:{obj_settings: settings},
     dataType: "json",
     cache: false,
     success: function (data) {
         // some handeling here
         return 0;
     },
     error: function(XMLHttpRequest, textStatus, errorThrown) {
         return 1;
     },
};
Run Code Online (Sandbox Code Playgroud)

为什么 AJAX 请求会立即触发?它似乎没有等待 model/insert.php 的响应,有没有办法强制它在触发下一个 AJAX 请求之前等待响应?

编辑1:

看来我没说清楚,抱歉,我不想等,我想排队接听电话。

我无法一次性拨打电话,这在我目前的情况下是不可能的。

Sam*_*iew 5

如果要等待响应,请将 async 设置为 false(默认值:true)

$.ajax({
    async: false,
    ...
Run Code Online (Sandbox Code Playgroud)

http://api.jquery.com/jQuery.ajax/

如果您不想阻塞,您可以使用 设置成功处理函数.ajaxComplete(),并且如果您想等待所有连接完成,则必须跟踪活动的 AJAX 连接 -如何知道所有 ajax 调用何时完成

最好的解决方案是将 AJAX 请求的数量减少到一个。如果您必须循环 AJAX 请求,则可以在某个地方简化逻辑(也许可以将其放在服务器中?)

编辑1:( 响应OP编辑)

如果你想对 AJAX 请求进行排队,这个问题之前已经回答过:

您还可以使用这些库(您只需谷歌即可):

  • 它会冻结浏览器 (3认同)