Javascript,Jquery Codepen

时间:2017-01-29 18:02:21

标签: javascript jquery ajax

我对.getjson感到很疯狂。我试图使用.getjson从维基百科API获取数据,它工作正常。假设维基百科API返回10个选项,在循环每个选择之前,我试图在for循环中找到数组的长度。 “.getjson”尚未提供数据。

Here是我在codepen中的工作。查看for循环中的console.log(sp.length);sp.length。他们应该提供类似的数据,但其中一个是未定义的,其他的工作正常。

这是我的JS代码:

    $( document ).ready(function() {


var api_wiki="https://en.wikipedia.org/w/api.php?action=query&format=json&list=search&titles=Main+Page&srsearch=cat&srwhat=text&callback=?";
var sp;

$.getJSON(api_wiki,function(data){
  sp=data.query.search;
 // console.log(sp.length);
}); //End of getJSON

for (var i=0;i<sp.length;i++){

} 


});//End of get ready

为什么console.log给出两个不同的答案,即使它们都引用相同的变量?一个是未定义的,另一个是正常的。 我编辑了这个问题,只是为了反映面临的问题。

1 个答案:

答案 0 :(得分:0)

您无法让javascript使用它尚未拥有的数据。您需要等待数据到达。尝试将for循环放在函数中并在getJSON的onReady事件中调用该函数:

$( document ).ready(function() {


var api_wiki="https://en.wikipedia.org/w/api.php?action=query&format=json&list=search&titles=Main+Page&srsearch=cat&srwhat=text&callback=?";
var sp;

$.getJSON(api_wiki,function(data){
  sp=data.query.search;
  console.log(sp.length);
  workWithTheData(sp);
}); //End of getJSON

function workWithTheData(sp){
    for (var i=0;i<sp.length;i++){
      console.log(sp[i]);
    } 
 }


});//End of get ready