$ getJSON und For-Schleife Problem

8

Hiermit wird eine Tabelle mit der Anzahl der Ergebnisse gefüllt, die von der MediaWiki-API-Abfrage /api.php?action=query&list=querypage&qppage=BrokenRedirects zurückgegeben werden. Die Anzahl der Ergebnisse wird dann zur ID hinzugefügt, zum Beispiel:

%Vor%

Aber da es noch sieben Mal wiederholt wird, habe ich die Argumente für qppage in ein Array geschrieben und eine for-Schleife verwendet, um den gesamten Code zu verkürzen.

%Vor%

Die erste, nicht geschlungene Version funktioniert. Aber als ich eine Schleife hinzufügte, tat es das nicht. Der $getJSON -Teil wird ausgeführt, aber er fügt die resultierenden Daten nicht zur ID hinzu. Ich habe es durch JSLint laufen lassen, das abgesehen davon, dass man sich über Funktionen in einer Schleife beschwert und var i mit var array deklariert hat, wenig Hilfe zurückgegeben hat. Ich bin relativ unerfahren mit Javascript also gedacht vielleicht eine Variable kann nicht zweimal innerhalb einer Schleife verwendet werden? Abgesehen davon, vielleicht etwas mit der Verwendung einer ID innerhalb einer Schleife zu tun?

    
Onei 11.03.2013, 20:15
quelle

4 Antworten

23

Das ist ein klassisches Problem: i hat den Wert von end of loop, wenn der Callback aufgerufen wird.

Sie können es so beheben:

%Vor%     
Denys Séguret 11.03.2013, 20:16
quelle
1

getJSON ist ein asynchroner Ajax-Aufruf

REFER: synchrone Ajax-Aufrufe verwenden

    
Girish 11.03.2013 20:36
quelle
1

Verwenden Sie Jquery $ .each () , um das Array anstelle einer for-Schleife zu durchlaufen.

Zum Beispiel:

%Vor%     
user2973469 25.01.2016 18:57
quelle
0

Sie sollten eine Funktion wie -

schreiben %Vor%

und rufe dann mit einer Timeout-Option wie -

auf

setTimeout('callUrl(+ array[i] +)',500); innerhalb der Schleife -

d. h.

%Vor%

Hier ist eine Verzögerung für jeden Anruf erforderlich.

    
Piyas De 11.03.2013 20:22
quelle

Tags und Links