首页 > 解决方案 > 如何将多个 Ajax Post 调用异步到同一个 URL

问题描述

我在 javascript 中有一组项目,对于每个项目,我必须将 ajax 发布到 URL 以获取相应的信息并在容器中显示信息。代码大致如下所示:

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 请求只有在前一个项目完成后才会触发(始终执行部分)。

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

编辑:原来,它是以阻塞方式处理请求的 PHP 后端。也许会话是这里的罪魁祸首。我现在要结束这个问题。感谢您的帮助和建议。

标签: javascriptajax

解决方案


尝试默认的 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!');
});
}

或者您可以在 .done 方法上调用该方法


推荐阅读