无法理解这一点。我正在尝试将来自同步ajax调用的数据存储在var和console日志中,但是,最终的控制台日志在同步调用完成之前运行,因此返回undefined
。
代码:
$(document).ready(function() {
var longitude = 51.4543,
latitude = 0.9781,
apiKey = "",
result;
$.ajax({
async: false,
url: "https://api.forecast.io/forecast/" + apiKey + "/" + longitude + "," + latitude,
dataType: "jsonp",
success: function(data) {
result = data;
//working
console.log(result);
},
});
//not working
console.log(result);
});
我的印象是JS会在继续之前等待同步调用完成,但我猜不是这样的情况?如果没有,我如何将get响应存储在全局var中以供其他地方使用?
答案 0 :(得分:3)
您正在发出JSONP请求。 JSONP 无法同步执行。因此,async: false
将被忽略。
您必须重新构建代码才能异步工作。
如果您需要返回其他函数可用于获取数据的内容,请使用promise。 $.ajax
将返回一个。
global_var = $.ajax(...);
global_var.done(function (data) { console.log("Use some data", data); });
global_var.done(function (data) { console.log("Use some data again", data); });
答案 1 :(得分:1)
所以简短的回答是没有,你不能将result
存储在全局变量中。无论其他功能想要使用result
,都需要进入这个区块:
function(data){
...here...
}