2012-04-15 14 views
2

Ich habe eine ziemlich einfache Aufgabe, bestimmte Texte auf einer Seite zu ersetzen. Sagen wir, es gibt 10 Divs, von denen jedes eine spezifische Information enthält. Ich möchte diese Informationen für eine Datenbank überprüfen und den Text durch ein Ergebnis aus der Datenbank ersetzen.GM_xmlhttpRequest innerhalb WHILE Schleife

Ich platziere GM_xmlhttpRequest innerhalb einer Schleife, die diese Informationen überprüfen und für jedes der 10 DIVs ersetzen sollte. Leider funktioniert das nicht und das letzte DIV enthält 10 sehr ähnliche Informationen. Mit anderen Worten, GM_xmlhttpRequest wird 10 mal ausgeführt, wenn i = 10 ist.

Unten ist ein vereinfachter Code:

var i=1; 
while (i<=10) { 
    var id = 'div-' + i; //This sets the name of the DIV 
    var ShowContent = document.getElementById(id); 
    GoToURL = "http://domain.com/?=" + id; //This specifies a URL that changes on every loop 
    GM_xmlhttpRequest({ 
    method: "GET", 
    url: GoToURL, 
    onload: function(response) { 
     ShowContent.innerHTML = response; //This should replace the information for each DIV 
     alert(i); //TEST: this shows always 11 (even not 10!). Why? 
    } 
    }); 
    i++; 
) 

Antwort

3

Ajax ist asynchrones, so dass, wenn Antwort geliefert wird, wird Ihre Schleife bereits (so i=11) beendet werden.

Aber Sie können für den Umgang mit 'i' in Antwortfunktion Verschluss verwenden:

var i=1; 
while (i<=10) { 
    (function(i){ 
    var id = 'div-' + i; //This sets the name of the DIV 
    var ShowContent = document.getElementById(id); 
    GoToURL = "http://domain.com/?=" + id; //This specifies a URL  
    GM_xmlhttpRequest({ 
     method: "GET", 
     url: GoToURL, 
     onload: function(response) { 
      ShowContent.innerHTML = response; //This should replace the information for each DIV 
      alert(i); 
     } 
    }); 
    })(i); 
    i++; 
} 
+0

Perfect, es funktioniert jetzt. Vielen Dank! – mrinterested

+0

@mrinterested Gern geschehen. Ich bin froh, dir helfen zu können. – Engineer

Verwandte Themen