代码之家  ›  专栏  ›  技术社区  ›  Gaurav

如何将多个ajax post调用异步到同一url

  •  0
  • Gaurav  · 技术社区  · 7 年前

    我在javascript中有一个项目数组,对于每个项目,我必须向url发送一个ajax帖子,以获取相应的信息并在容器中显示信息。代码大致如下:

    var data = some_data;
    array.forEach(item, idx)=> {
        callAjaxAndUpdate(data, item, $('div#container'+i);
    });
    

    ajax方法很简单

    var standardUrl = 'https://example.com/post.php';
    function callAjaxAndUpdate(data, item, container) {
        $.ajax({
            url: standardUrl
            data: data,
            type: 'POST',
        }).done(function(res) {
           container.append(res.data);
        }).fail(function(res) {
           container.append(res.responseText);
        }).always(function() {
           container.append('DONE!');
        });
    }
    

    然而,整件事似乎都成了障碍。我在服务器端记录了时间戳,我可以看到,只有在前一个项目的ajax请求完成(总是执行部分)之后,才会触发每个项目的ajax请求。

    有人能帮我解释一下为什么这个设置是同步的,以及如何使它异步吗?请注意,此脚本是在浏览器中执行的,而不是在nodejs上。

    编辑: 结果,是php后端以阻塞的方式处理请求。也许这次会议是罪魁祸首。我现在就结束这个问题。谢谢你的帮助和建议。

    1 回复  |  直到 7 年前
        1
  •  1
  •   Googlian    7 年前

    尝试默认ajax异步

    var standardUrl = 'https://example.com/post.php';
    function callAjaxAndUpdate(data, item, container) {
    $.ajax({
        url: standardUrl,
        async: true,
        data: data,
        type: 'POST',
    }).done(function(res) {
       container.append(res.data);
    }).fail(function(res) {
       container.append(res.responseText);
    }).always(function() {
       container.append('DONE!');
    });
    }
    

    或者可以调用方法on。