JavaScript、Jquery 代码笔

标签 javascript jquery ajax

我对 .getjson 感到疯狂。我正在尝试使用 .getjson 从 Wikipedia API 获取数据,它工作正常。假设 Wikipedia 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 给出两个不同的答案,即使它们都引用同一个变量?一个未定义,另一个工作正常。 我编辑了问题,使其仅反射(reflect)面临的问题。

最佳答案

你不能要求 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

关于JavaScript、Jquery 代码笔,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41924168/

相关文章:

javascript - Angular Material Mat-error 在使用正则表达式进行验证时显示有效输入的错误

java - Ajax 发布到 RESTful Web 服务

php - 表单验证-安全

javascript - 解决错误时对socket.write的 promise (nodejs)

javascript - 如何将时间戳数组减少为特定时间范围内元素数量计数的数组

javascript - 无法将 Bootstrap 4、jQuery 和 PopperJS 库添加到 .angular-cli.json

php - 通过单击链接提交表单,而不使用提交按钮

jquery - 使用 CSS 动画比使用 jQuery 动画有什么优势吗? (性能,或其他)

javascript - 使用某种占位符在 jquery 中查找元素

javascript - 如何使用 $.Ajax 将 Windows 身份验证凭据传递给 Web API 服务