gpt4 book ai didi

javascript - $getJSON 和 for 循环问题

转载 作者:可可西里 更新时间:2023-11-01 02:14:31 25 4
gpt4 key购买 nike

这是用从 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 array 声明 var i 外,几乎没有什么帮助。我对 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);
});
}

关于javascript - $getJSON 和 for 循环问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15347750/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com