2009-06-06 7 views
2

Ich möchte X Anzahl der AJAX-Anfragen in jQuery machen und die JSON-Antwort zu einem Array hinzufügen. Wenn alle Ajax-Anfragen erledigt sind, möchte ich etwas Code ausführen. Gibt es einen guten Weg, dies zu lösen?Ein Rückruf für mehrere JSON-Anfragen

Antwort

1

Dieser Code sollte tun, was Sie wollen, alle jQuery Stil. Im Grunde verwendet es ein bisschen Rekursion, um es zu erledigen. Übergeben Sie Optionen an die Funktion loadmultiples, um die gewünschten Einstellungen vorzunehmen, und JSON-Antworten werden auf ein Array übertragen. Sie könnten es einfach ändern, wenn Sie stattdessen die JSON-Antworten in eine einzelne Struktur zusammenführen wollten, aber ich war mir nicht sicher, ob das das war, was Sie wollten.

var loadmultiples = function(options) {  

    var settings = $.extend({ 

     //set the url to get 
     url : '/response.json', 

     //this function is called when everything is done 
     callback : function() {}, 

     //set this option to define how many loads to do 
     numbertodo : 10, 

     //these two are just used for 
     //storing data while we recurse, 
     //and keeping track of the current position 
     //however you can change them if you want to start 
     //from a different point, or have existing data 
     numberdone : 0, 
     data : [] 
    }, options || {}); 

    //load the json, passing up the current 'number' 
    //of the content to load 
    $.ajax({ 
     url : settings.url, 
     data : { 'number' : settings.numberdone }, 
     dataType: 'json',   
     success: function(result) {    

      //add the response to the data 
      settings.data.push(result); 

      //increment the counter of how many files have been done 
      settings.numberdone++; 

      // 
      if(settings.numberdone < settings.numbertoexecute) { 
       loadmultiples(settings); 
      } else { 
       settings.callback(settings.data); 
      } 

     }   
    }); 

} 

//so now we can call it... 
loadmultiples({ 
    callback: function(data) { 
     //this function will get called when all the data calls have been 
     //completed, and the resulting data is in the data parameter 

    } 
}); 
+0

Danke! Ich möchte den JSON von verschiedenen URLs laden, aber Ihr Code könnte leicht geändert werden, um das zu tun. – gustavlarson

2

Ich weiß nichts anderes, als die Anforderungen zu zählen und sie manuell in Ihrem Code zu zählen. Sobald sie alle zurück sind und berücksichtigt sind, führen Sie Ihren Master-Callback aus.

0

Für jede Ajax-Antwort würde ich tun:

for(var k in json) 
    someArray[k]=json[k]; 

Aber ich bin mir nicht sicher, wie Sie Ihre Daten json aussieht.

0

tat ich das vor kurzem durch eine Reihe von AJAX-Anfragen abzufeuern, dann Dekrementieren einen Zähler, wie sie in kommen.

Es funktionierte gut, aber ich beenden meinen Code aus einer Reihe von kleinen Ajax-Wechsel nach oben Anfragen, nur den Server für alles auf einmal zu fragen. Viel weniger Anfragen und weniger Overhead und viel robuster.

Es sei denn, Sie haben einen guten Grund, individuelle Anfragen zu stellen (einige Anfragen sind wahrscheinlich schnell, einige langsam, und Sie können eine aussagekräftige Anzeige von Informationen anbieten, wenn die Teile eintreffen). vorausgesetzt, Sie können den Servercode ändern oder neuen Servercode hinzufügen).

Verwandte Themen