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

Javascript 对多个AJAX请求排队,等待响应,而不是冻结浏览器?,javascript,jquery,ajax,queue,Javascript,Jquery,Ajax,Queue,我正在编写一个脚本,我需要循环一系列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

我正在编写一个脚本,我需要循环一系列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;
     },
};
$('#fetchPosts')。单击(函数(){
对于(var i=0;i
为什么AJAX请求会立即触发?它似乎不会等待model/insert.php的响应,有没有办法强迫它在触发下一个AJAX请求之前等待响应

编辑1:

我好像不清楚,对不起,我不想让它等,我想把电话排好


我无法在一个请求中进行调用,在我当前的情况下这是不可能的。

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

如果不希望阻塞,可以使用设置成功处理程序函数,如果要等待所有连接完成,则必须跟踪活动的AJAX连接-

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

编辑1:(响应OP编辑)

如果要对AJAX请求排队,在这里之前已经回答了这个问题:

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

您的AJAX调用将等待服务器的响应,但会异步执行。也就是说,当服务器响应时,您的脚本将继续执行,而不是阻止浏览器。当服务器响应时(或请求超时时,通常为几秒钟)然后将执行
成功:
错误:
函数

这里代码的作用是基于link_数组长度创建多个并发请求

您可以在AJAX调用中指定
async:false
,但这会在所有AJAX调用进行时冻结浏览器

您应该重写代码以执行所有处理,这是
success:
函数的一部分。我建议您重写代码,将所有请求组合成一个,并进行一次AJAX调用,而不是多次调用,并让服务器将所有响应作为一个块返回。我不能确切地建议您如何执行此操作-这是一种实现依附性

编辑:
根据您的说明,如果您希望按顺序调用它们,则需要success函数来调用下一个。然后您将有一系列成功调用next,其成功调用next,其成功调用next..等等,直到最后一个进行最终处理的函数。一种方法是将呼叫号码传递给suaccess函数。

它立即启动,不需要等待,因为这是AJAX最擅长的功能(第一个A代表异步)

对服务器的请求可能需要很长时间才能响应,并且在大多数情况下,不希望用户的浏览器冻结或阻止他们执行任何其他操作。如果您这样做,您可能只需要使用普通请求

这就是您为它提供success error函数的原因,以便它可以在服务器响应时调用这些函数

如果您希望在调用insert.php时浏览器中不会发生任何事情,您可以在加载图像的所有内容上放置一个覆盖层(如深色div),并在成功后将其删除


可能将$('#fetchPosts')元素替换为“加载…”文本,然后在完成后将其反转。隐藏fetchPosts元素的可见性并添加不同的“加载…”元素是一种很好的方法。

等待响应是什么意思?是否要按顺序发送循环请求这里有一种通用的非jquery技术可以做到这一点。也可以轻松地执行多线程(同时请求):它将冻结浏览器它将冻结浏览器
$.ajax({
    async: false,
    ...