这是用 MediaWiki API 查询返回的结果量填充表/api.php?action=query&list=querypage&qppage=BrokenRedirects
。然后将结果数添加到 id 中,例如:
// BrokenRedirects
$.getJSON('/api.php?action=query&list=querypage&qppage=BrokenRedirects&format=json', function (data) {
$('#BrokenRedirects').text(data.query.querypage.results.length);
});
但由于它又重复了 7 次,我将 qppage 的参数放入一个数组中,并使用 for 循环来缩短整体代码。
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
部分执行,但无法将结果数据添加到 id。我通过 JSLint 运行它,除了抱怨循环中的函数并声明var i
with var array
回报很少。我对 javascript 相对缺乏经验,所以认为也许一个变量不能在循环中使用两次?除此之外,也许与在循环中使用 id 有关?
这是一个经典问题:i
调用回调时具有循环结束的值。
你可以这样修复它:
for (var i = 0; i < array.length; i++) {
(function(i) { // protects i in an immediately called function
$.getJSON('/api.php?action=query&list=querypage&qppage=' + array[i] + '&format=json', function (data) {
$('#' + array[i]).text(data.query.querypage.results.length);
});
})(i);
}
2018年附录:
当今的浏览器中现在有另一种更清洁的解决方案:使用let
代替var
:
for (let 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);
});
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)