如何将多个Ajax Post调用异步到同一个URL

时间:2018-12-20 11:32:59

标签: javascript ajax

我在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请求。

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

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

1 个答案:

答案 0 :(得分:1)

尝试使用默认的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方法上调用该方法