【发布时间】:2019-05-20 22:14:59
【问题描述】:
我在 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 后端以阻塞方式处理请求。也许会话是这里的罪魁祸首。我现在要结束这个问题。感谢您的帮助和建议。
【问题讨论】:
-
您可以使用 setTimeout 函数以一定的间隔时间使其异步。
-
api.jquery.com/jquery.ajax 表示已经是异步的。您的浏览器将对每个域的并发 ajax 调用应用限制,但我认为默认值通常约为 5
-
原来是 PHP 后端以阻塞方式处理请求。也许会话是这里的罪魁祸首。我现在要结束这个问题。感谢您的帮助和建议。
标签: javascript ajax