Jquery – 将Ajax jSON响应存储为变量
我正在尝试获取ajax请求的结果,以设置我可以在该请求之外访问的变量。 我已经尝试过这个JQuery – 将ajax响应存储到全局变量中,但我的变量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
这是一个异步请求,所以它会被触发,但是你的脚本在继续运行之前不会等待响应。 如果您需要等待ajax请求完成,请尝试以下方法:
var beer; $.getJSON(jsonUrl,function(json){ beer = json; checkDrink(); }); function checkDrink() { console.log(beer); }
问题是你在从服务器实际返回之前尝试访问数据,’success’函数实际上是一个在ajax调用成功完成时调用的回调。 $ .ajax(或$ .get)函数返回inmediatly …
您需要以某种方式向感兴趣的函数发出信号,告知您将数据存入成功回调中的“beer”var
建议以下代码:
var beer = $.ajax({ url: jsonUrl, async: false, dataType: 'json' }).responseJSON;
关键时刻是:
- 将
async
设置为false,将结果作为变量返回,而不是调用成功回调异步 - 将
dataType
设置为json以将服务器响应字符串解析为json