我正在使用AJAX加載一組數據塊。這些塊中的每一個都需要按順序在DOM中呈現,所以我請求第一個塊並呈現它,然後請求以下內容,直到最後一個爲止。當最後一個完成,延期對象被解析成通知另一個函數的所有塊被裝:按順序多個AJAX成功
function loadBlock(block, limit) {
var deferred = $.Deferred();
(function request(block, limit) {
$.ajax({
url: 'block/' + block,
success: function(html) {
$('#block-' + block).html(html);
var nextBlock = block + 1;
if (nextBlock <= limit)
request(nextBlock, limit);
else
deferred.resolve();
}
});
})(block, limit);
return deferred.promise();
}
然而,這整個等待上一個請求完成可以減緩的過程中下降了很多。
所以現在我所要做的只是將所有的請求作爲一次,並讓服務器儘可能多地做,但不是在相應的請求完成後加載每個塊,我想要一個塊等待直到前一個被加載。
示例:發送了10個請求。我們希望按照以下順序渲染這些塊:1,2,3,...假設前三個塊的請求按順序完成,因此這些塊將按照我們的需要加載到頁面中,但是接下來的塊5在塊4之前已經準備好了,我們希望將塊5保留在某個地方,並且只有在塊4存在之後,即在塊4的請求完成並且已經被渲染之後,纔將其顯示在頁面中。
我的問題,然後是:
- 我怎麼能並行運行某些功能加載射擊在頁面塊的請求和其他功能?
- 如何發出加載特定塊的函數,以完成上一個塊,以便它可以繼續?
另外,我需要保留延遲邏輯,因爲我仍然必須在完成整個過程時發出信號。
你可以開發一些答案嗎?我無法看到如何將其集成到我的場景中。 – dabadaba