我试图对维基百科API进行AJAX调用,循环访问之前调用维基百科API的结果。
var intro = [];
for (var i in json.query.search) {
(function(i) {
$.getJSON("https://en.wikipedia.org/w/api.php?action=query&format=json&prop=extracts&list=&meta=&titles=" + link[i] + "&callback=?&exsentences=1&exintro=1", function(data) {
for (var key in data.query.pages) {
var temp = data.query.pages[key].extract;
intro.push(temp);
break;
}
console.log(intro);
$('#results-div').append("<div class='col-xs-12'><a target='_blank' href='https://en.wikipedia.org/wiki/" + link[i] + "'><div class='result-inner'><h2 class='text-center'>" + pageTitle[i] + "</h2>" + intro[i] + "</div></a></div>");
});
})(i);
}
getJSON没有按顺序查看结果(如果在getJSON的成功函数中调用,则i的值以0-10的随机顺序进行,而如果它在其外部被调用,它将从0到10顺序)。因此,附加值的顺序不正确。
不仅如此,来自getJSON的数据填充的intro
数组并不总是对应于link
和pageTitle
数组(彼此对应)的值。这是getJSON使用的i
值与当前在循环中迭代的值相同。例如当我从0开始时,getJSON的第一个电话可能会使用5作为i
。
如何让getJSON使用正确的迭代器值?
答案 0 :(得分:0)
我不确定您是否可以强制getJSON以特定顺序创建具有键的对象,但您可以编写自己的for循环来控制迭代的顺序:
for (var j = 0; j < data.query.pages.length; j++) {
var temp = data.query.pages[j].extract;
intro.push(temp);
}