我正在尝试获取ajax请求的结果,以设置我可以在该请求之外访问的变量。我已经尝试了这个JQuery - Storing ajax response into global variable,但我的变量beer
在$.getJSON
和$.ajax
函数之外仍未定义(我尝试了两种)。
以下是我的代码,我可以在其中查看console.log(beer)
的结果。
var beer;
$.getJSON(jsonUrl, function (json) {
beer = json;
console.log(beer); // returns beer
});
console.log(beer); // returns undefined
var beer = (function () {
var result;
$.ajax({
url: jsonUrl,
success: function (data) {
result = data;
console.log(beer); // returns beer
}
});
console.log(result); // returns undefined
if (result) return result;
})();
console.log(beer); // returns undefined
答案 0 :(得分:17)
这是一个异步请求,所以它会被触发,但是你的脚本在继续之前不会等待响应。如果您需要等待ajax请求完成,请尝试以下方法:
var beer;
$.getJSON(jsonUrl,function(json){
beer = json;
checkDrink();
});
function checkDrink() {
console.log(beer);
}
答案 1 :(得分:3)
建议以下代码:
var beer = $.ajax({
url: jsonUrl,
async: false,
dataType: 'json'
}).responseJSON;
关键时刻是:
async
设置为false,将结果作为变量返回,而不是调用成功回调异步dataType
设置为json以将服务器响应字符串解析为json 答案 2 :(得分:1)
问题是你在实际从服务器返回之前尝试访问数据,'success'函数实际上是一个在ajax调用成功完成时调用的回调。 $ .ajax(或$ .get)函数返回inmediatly ...
您需要以某种方式向感兴趣的函数发出信号,告知您将数据导入成功回调中的'beer'var