2016-05-24 6 views
0

Ich versuche, einen AJAX-Aufruf an die Wikipedia-API zu machen, durchschleifen Ergebnisse von einem früheren Aufruf der Wikipedia API.Ajax ruft Scrambling-Iterator-Wert

var intro = []; 

for (var i in json.query.search) { 
     (function(i) { 
     $.getJSON("https://en.wikipedia.org/w/api.php?action=query&format=json&prop=extracts&list=&meta=&titles=" + link[i] + "&callback=?&exsentences=1&exintro=1", function(data) { 
      for (var key in data.query.pages) { 
      var temp = data.query.pages[key].extract; 
      intro.push(temp); 
      break; 
      } 
      console.log(intro); 
      $('#results-div').append("<div class='col-xs-12'><a target='_blank' href='https://en.wikipedia.org/wiki/" + link[i] + "'><div class='result-inner'><h2 class='text-center'>" + pageTitle[i] + "</h2>" + intro[i] + "</div></a></div>"); 
     }); 
     })(i); 
    } 

getJSON nicht durch die Ergebnisse in Ordnung gehen wird (der Wert von i, wenn innerhalb getJSON Erfolg Funktion aufgerufen, einer zufälligen Reihenfolge von 0 bis 10 geht in, während es außerhalb der es heißt, wenn, wird es gehen von 0-10 in Reihenfolge). Daher sind die angehängten Werte nicht in der richtigen Reihenfolge.

Nicht nur, dass die intro Array von Daten aus getJSON bevölkerten nicht immer zu den Werten der link und pageTitle Arrays (die einander entsprechen) entsprechen. Dies ist der i Wert, der von getJSON verwendet wird, ist nicht der gleiche wie der, der gerade in der Schleife iteriert wird. z.B. Während ich bei 0 anfange, kann getJSONs erster Anruf 5 als i verwenden.

Wie bekomme ich getJSON, um den richtigen Iteratorwert zu verwenden?

Antwort

0

Ich bin nicht sicher, dass Sie getJSON zwingen können ein Objekt mit Tasten in einer bestimmten Reihenfolge zu erstellen, aber Sie können Ihre eigene for-Schleife schreiben, in dem Sie die Reihenfolge der Iteration steuern:

for (var j = 0; j < data.query.pages.length; j++) { 
    var temp = data.query.pages[j].extract; 
    intro.push(temp); 
} 
+0

, das nicht arbeite, da ich speziell einen zweiten, anderen Aufruf machen muss, um die Werte für * intro * zu erhalten –