ajax调用加扰迭代器值

时间:2016-05-24 23:23:07

标签: javascript jquery ajax loops iterator

我试图对维基百科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数组并不总是对应于linkpageTitle数组(彼此对应)的值。这是getJSON使用的i值与当前在循环中迭代的值相同。例如当我从0开始时,getJSON的第一个电话可能会使用5作为i

如何让getJSON使用正确的迭代器值?

1 个答案:

答案 0 :(得分:0)

我不确定您是否可以强制getJSON以特定顺序创建具有键的对象,但您可以编写自己的for循环来控制迭代的顺序:

for (var j = 0; j < data.query.pages.length; j++) {
  var temp = data.query.pages[j].extract;
  intro.push(temp);
}