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变量进行控制台时,它将返回一个空数组。
但是,如果在页面加载后用完全相同的函数创建一个新变量,则脚本将按预期运行。
加载页面时,它不是在加载实际数据。它加载一个空数组。我意识到该函数是异步的,因此在加载页面时如何使数组不为空?
这是我的代码:
(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