Это для заполнения таблицы количеством результатов, возвращаемых из запроса API MediaWiki /api.php?action=query&list=querypage&qppage=BrokenRedirects
. Количество результатов затем добавляется к идентификатору, например:
// BrokenRedirects
$.getJSON('/api.php?action=query&list=querypage&qppage=BrokenRedirects&format=json', function (data) {
$('#BrokenRedirects').text(data.query.querypage.results.length);
});
Но, как это повторяется еще 7 раз я сделал аргументы для qppage в массив и использовать для цикла, чтобы сократить общий код.
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);
});
}
Первый, непроверенный, версия работает. Но когда я добавил цикл, это не так. Выполняется часть $getJSON
, но затем не удается добавить результирующие данные к идентификатору. Я запускал его через JSLint, который, кроме жалобы на функции в цикле, и объявлял var i
с var array
, возвратил небольшую помощь. Я относительно неопытен с javascript, поэтому, по-видимому, переменная не может использоваться дважды в цикле? Помимо этого, возможно, что-то связано с использованием идентификатора внутри цикла?
возможно дубликат [Использование SetTimeout и целого числа в цикле] (http://stackoverflow.com/questions/13731759/using-settimeout-and-an-integer- in-a-for-loop) –
Возможный дубликат [Закрытие Javascript внутри петель - простой практический пример] (http://stackoverflow.com/questions/750486/javascript-closure-inside-loops-simple-practical-example) – Bergi
getJSON является асинхронным вызовом REFER: [использовать синхронные вызовы ajax] [1] [1]: http://stackoverflow.com/questions/3419026/jquery-getjson-function-timing-issue – Girish