Soru asked before oldu, ama neredeyse dört yıl önceydi ve belki daha iyi bir çözüm var.
Ajax aracılığıyla bazen ek verilerin getirildiği $ .each-loop'um var.
Alınan verilerle bir nesneyi buluyorum, döngüden sonra HTML'den nesne üreten bir işlev var. Sorun, ajax verisi gelmeden önce döngüsünün bitmesidir. HTML üreten işleve bir uyarı koyarsam içerik düzgün yükleniyor.
Sadece döngü ve tüm ajax çağrıları bittiğinde HTML üreteci işlevini çağıran bir çözüm arıyorum. Belki başlangıç Ajax isteklerini saymak ve hepsi bittiğinde beklemek bir çözümdür?
jQuery ertelenmiş çözüm benim için doğru çözüm olduğuna inanıyorum ama her şeyin döngü içinde kaldığı örnekleri buluyorum. Birisi yardım edebilir mi?
Ben en önemli şeylerden için kodumu aşağı çalmıştır: Birisi bunu nasıl bir tavsiye benim verebilir
//goes through each testplace -->main loop
$.each(jsobject, function(key, value)
{
//build object together...
for (var i = 0, numComputer = jenkinsComputer.contents.computer.length; i < numComputer; i++)
{
//If the testplace is in both objects then fire AJAX request
if (jenkinsComputer.contents.computer[i].displayName == key) //<<<This can happen only once per $.each loop, but it does not happen every time
{
//next $.each-iteration should only happen when received the JSON
var testplaceurl = jenkinsComputer.contents.computer[i].executors[0].currentExecutable.url;
$.when($.getJSON("php/ba-simple-proxy.php?url=" + encodeURI(testplaceurl) + "api/json?depth=1&pretty=1")).done(function(jenkinsUser)
{
//build object together...
});
}
}
}); //End of main Loop ($.each)
generateHTML(builtObject);
harika olurdu.
Sadece küçük bir ipucu: AJAX bir döngü içinde iyi bir fikir değildir. Daha basit görünebilir, ancak sunucu tarafının döngü yapmasına izin vermek daha iyidir. –
Tüm script yerel ağımızda çalışıyor ve çoğu zaman sadece 5-10 kısa ajax çağrıları var, bu yüzden burada bir ağ sorunu yok. Bunun için bir javascript çözümü varsa harika olurdu. – bademeister