jQuery Deferredの使用に関して、this questionの先頭の答えを読んでいます。jQuery deferred ajax cache
IDの配列をループしています。各IDについて、それに関連するデータをajaxリクエストから取得するか、ajaxリクエストがすでにデータを正常に戻していた場合はキャッシュから取得する必要があります。
各ループで、$ .when()を使用して、getData()がそのIDを処理する前に、キャッシュまたはAjax呼び出しが成功したかどうかを確認します。現在の問題は、getData()のajaxが成功するのを待たずに、IDの処理がとにかく進むことです。
いくつかの擬似コード:
var IDs = ["1", "2", "1", "3", "1"];
//ID "1" is repeated
//data for "1" should should require ajax get the first time
//subsequent processing should get data for "1" from dataCache
var dataCache = [];
function getData(ID){
if (/*data for ID in dataCache*/){
//return data pertaining to ID from dataCache
} else {
return $.getJSON("returnJSONDataByID/" + ID, function(resp){
//push resp data to dataCache
})
}
}
for (/*each item i in IDs*/){
$.when(getData(IDs[i])).then(function(){
//process IDs[i] data
//this is the resolved handler, which should be executed
//when either getData() returns data from the dataCache,
//or $.getJSON succeeds
//PROBLEM: this is currently executing every loop and
//and doesn't wait for the ajax to return resp
})
}
私はこの問題に直面しており、あなたのソリューションはそれを解決して24時間です。 ありがとう – Stormsson