2012-04-09 42 views
9
loadInfo: function(){ 
    var jsonCounter = 0, 
    room = ['room1','room2','room3'], 
    dates = [], 
    prices = [] 

    $.each(booking.rooms, function(key, room_name) { 
     $.getJSON('/get_info.php?room='+room_name, function(data) { 
      dates[room_name] = data 
      jsonCounter++ 
     }) 
     $.getJSON('/get_info.php?room='+room_name+'&prices', function(data) { 
      prices[room_name] = data 
      jsonCounter++ 
     }) 

    }) 

    function checkIfReady() { 
     if (jsonCounter === rooms.length * 2) { 
      clearInterval(timer) 
      run_the_rest_of_the_app() 
     } 
    } 

    var timer = setInterval(checkIfReady, 100) 

} 

tamamlandı. $ .when ve .done kullanayım, ama kaç tane oda olabileceğini bilmiyorum, o zaman ne zaman koyacağımı bilmiyorum.Ateşleme geri arama

Tüm AJAX istekleri geri geldiğinde run_the_rest_of_the_app() işlevinin çağrılmasını nasıl sağlayabilirim? AJAX arama yapmadan önce

cevap

19
  • var activeAJAX = 0;

  • , activeAJAX++;

  • (geri aramasında) AJAX çağrısı tamamladıktan sonra: if (--activeAJAX == 0) { allDone(); } İşte

+2

+1 çok zarif –

4

kullanılacak nasıl/done

loadInfo: function(){ 
    var room = ['room1','room2','room3'], 
    dates = [], 
    prices = [], 
    requests = []; 

    $.each(booking.rooms, function(key, room_name) { 
     var aRequest; 

     aRequest = $.getJSON('/get_info.php?room='+room_name, function(data) { 
      dates[room_name] = data; 
     }); 
     requests.push(aRequest); 

     aRequest = $.getJSON('/get_info.php?room='+room_name+'&prices', function(data) { 
      prices[room_name] = data; 
     }); 
     requests.push(aRequest); 

    }) 

    $.when.apply($, requests).done(run_the_rest_of_the_app); 
} 
+0

Tuhaf olarak bu benim testimde çalışmıyor. Yapılan bitler, isteklerin oldukça sık yapılmasından önce patlar. Garip. –

+0

Hmm .. Bireysel “başarı” geri dönüşleri ve grubun “bitti” geri aranması arasında bir yarış durumu görüp görmediğimizi merak ediyorum. İstekler gerçekten yapılmadı mı? ya da sadece "geri" geri çağrısı yürütüldüğünde geri aramaları yapılmaz mı? –

+0

Ayrıca $ .each önce bir tane daha var, bu yüzden ilk $ .getJSON tetiklenir önce biri tamamlanmış olabilir? Tuhaf. Sonunda, bir durum çubuğu istediğim gibi, çöp zamanlayıcı sürümümde kaldım ve bunu kolaylaştırdı! –