To jest wypełnianie tabeli ilością wyników, które są zwracane z zapytania MediaWiki API /api.php?action=query&list=querypage&qppage=BrokenRedirects
. Liczba wyników Następnie dodaje się identyfikator, np
// BrokenRedirects
$.getJSON('/api.php?action=query&list=querypage&qppage=BrokenRedirects&format=json', function (data) {
$('#BrokenRedirects').text(data.query.querypage.results.length);
});
Jednak, jak to jest powtarzany 7 razy, i kolejne się argumenty za qppage w tablicy i stosuje się do obiegu w celu skrócenia całkowitego kodu.
var array = ['BrokenRedirects',
'DoubleRedirects',
'Unusedcategories',
'Unusedimages',
'Wantedcategories',
'Wantedfiles',
'Wantedpages',
'Wantedtemplates'];
for (var i = 0; i < array.length; i++) {
$.getJSON('/api.php?action=query&list=querypage&qppage=' + array[i] + '&format=json', function (data) {
$('#' + array[i]).text(data.query.querypage.results.length);
});
}
Pierwsza, rozpinana wersja działa. Ale kiedy dodałem pętlę, nie było. Część $getJSON
jest wykonywana, ale następnie nie dodaje do niej wynikowych danych. Przebiegłem przez JSLint, który oprócz narzekania na funkcje w pętli i deklarowania var i
z var array
zwrócił małą pomoc. Jestem stosunkowo niedoświadczony w javascript, więc myślę, że być może zmienną nie można użyć dwukrotnie w pętli? Poza tym, może coś wspólnego z użyciem identyfikatora w pętli?
możliwe duplikat [używa setTimeout i całkowitą w pętli] (http://stackoverflow.com/questions/13731759/using-settimeout-and-an-integer- in-a-for-loop) –
możliwy duplikat [zamknięcia JavaScript wewnątrz pętli - prosty praktyczny przykład] (http://stackoverflow.com/questions/750486/javascript-closure-inside-loops-simple-praktical-example) – Bergi
getJSON jest asynchroniczne wywołanie odnoszą się: [użytku synchroniczne POŁĄCZEŃ Ajax] [1] [1]: http://stackoverflow.com/questions/3419026/jquery-getjson-function-timing-issue – Girish