This question already has answers here:
Why is my variable unaltered after I modify it inside of a function? - Asynchronous code reference
                            
                                (6个答案)
                            
                    
                3年前关闭。
        

    

我目前正在学习使用API​​。我正在从我的Github存储库中检索数据。我试图让脚本将JSON信息加载到githubData变量中。但是,当我登录githubData变量进行控制台时,它将返回一个空数组。
但是,如果在页面加载后用完全相同的函数创建一个新变量,则脚本将按预期运行。
加载页面时,它不是在加载实际数据。它加载一个空数组。我意识到该函数是异步的,因此在加载页面时如何使数组不为空?
这是我的代码:

var githubAPI = 'https://api.github.com/repos/zacharysohovich/ticTacToe/readme';
var items = {};
jQuery.ajax({
  url: githubAPI,
  contentType: 'application/json; charset=utf-8',
  success: function(resultData) {
    $.each(resultData, function(key,val) {
      items[key] = val;
    });
  }
});
var githubData = $.map(items,function(k,v) {
  return ("<p>" + k + ": " + v + "</p>");
});

最佳答案

问题在于它是一个异步调用,这意味着一旦它激发了请求,它就会进入下一段代码。一旦到达githubData,item仍然是一个空对象,因为尚未收到api响应。
我将实例化var items = {}下的githubData变量
像这样

var items = {} var githubData;
然后在成功中:在执行$。函数之后,可以将

githubData = $.map(items,function(k,v) { return ("<p>" + k + ": " + v + "</p>");});

这可以确保api调用已完成,并且只要响应返回某些内容,项目中就应该包含一些内容

09-11 19:06