我的腳本使大約15個Ajax調用到我的服務器。我希望他們能夠並行執行。我試圖使用when
並行執行一堆Ajax請求,但由於某種原因,它仍然在逐一執行它們。
我的代碼如下:
var requests = $.map(results, function(result, i) {
var suggestionContainer = $('<div class="suggestion-' + i + '">' + result + '</div>');
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中。
你能否給我們一個原因,說明你最初會發出15個http請求(沒有談論js和css資產)? – Ismail
'requests'包含一個'$ .get()'ajax請求數組。我提出了15個請求,因爲我的'php'腳本調用的API服務器必須按順序進行。他們不接受批量請求。這個API也很慢,所以我不做15個獨立的調用,而不是讓用戶等待所有15個完成。 – BugHunterUK
@hamism另外,請求不會馬上發生。當用戶按下按鈕時發生。我只包含了導致問題的相關代碼。 – BugHunterUK