我的脚本使大约15个Ajax调用到我的服务器。我希望他们能够并行执行。我试图使用when并行执行一堆Ajax请求,但由于某种原因,它仍然在逐一执行它们。
我的代码如下:
var requests = $.map(results, function(result, i) {
var suggestionContainer = $('
resultsContainer.append(suggestionContainer);
return $.get('check.php', { keyword: result }).done(function(res) {
res = JSON.parse(res);
suggestionContainer.append(generateSocialMediaList(res.social_media))
.append(generateDomainList(res.domains));
}).fail(function() {
suggestionContainer.remove();
});
});
$.when(requests).done(function() {
console.log('Complete')
}, function() {
alert('Something Failed');
});
有什么我做错了吗?
我提出15个请求的原因是因为check.php致电第三方API。该API速度很慢,不幸的是没有其他选择。提出15个并行请求会比1个请求快得多,并等待check.php完成。
代码工作像这样:
到suggestions.php的请求的情况下(作为解决该问题它不是必需,这不是包括在内)。结果存储在数组results中。
结果(约有15个)返回并用map进行迭代。
我将建议插入到页面中。然后我回复一个承诺。
requests数组现在包含10-15个承诺。
我使用when来并行执行请求(这就是我至少要做的)。
成功完成DOM更新并将check.php的结果插入到DOM中。
+0
你能否给我们一个原因,说明你最初会发出15个http请求(没有谈论js和css资产)? –
+0
'requests'包含一个'$ .get()'ajax请求数组。我提出了15个请求,因为我的'php'脚本调用的API服务器必须按顺序进行。他们不接受批量请求。这个API也很慢,所以我不做15个独立的调用,而不是让用户等待所有15个完成。 –
+0
@hamism另外,请求不会马上发生。当用户按下按钮时发生。我只包含了导致问题的相关代码。 –