可能重复:
Can’t use returned data in .ajax method of jQuery anywhere but the function itself
我正在尝试将AJAX调用的返回值存储到变量中。
var getJSONData = function(){
JSONData = $.getJSON('/api');
};
var reloadPage = function(json_data){
//Do some DOM manipulation with the JSON data
//console.log(json_data) returns undefined
};
reloadPage(getJSONData());
此代码不起作用。当我直接访问它或使用以下代码
时,api可以工作$.getJSON('/api', function(data){console.log(data)});
这样可以获取我想要的JSON数据。
知道如何让它发挥作用吗?
答案 0 :(得分:5)
怎么样
var getJSONData = function(callback){
JSONData = $.getJSON('/api', callback);
};
var reloadPage = function(json_data){
//Do some DOM manipulation with the JSON data
//console.log(json_data) returns undefined
};
getJSONData(reloadPage);
答案 1 :(得分:3)
AJAX代表异步 JavaScript和XML。执行AJAX调用时,您的数据不会立即可用,因此您需要使用回调函数来响应以后的响应。
jQuery AJAX调用提供了您可以使用的Deferred Objects。
var getJSONData = function(){
return $.getJSON('/api');
};
var reloadPage = function(data){
console.log(data);
};
getJSONData().done(reloadPage);
答案 2 :(得分:2)
$.getJSON
不会返回JSON,而是返回承诺。
最简单的就是像这样使用它:
$.getJSON('/api', reloadPage);
当浏览器收到响应时,将使用JSON数据作为参数调用reloadPage
函数。
答案 3 :(得分:2)
$.getJSON()
是异步的。它可以通过回调访问:
var getJSONData = function(callback){
$.getJSON('/api').success(data) {
callback(data);
};
};
var reloadPage = function(){
getJSONData(function(json_data) {
//Do some DOM manipulation with the JSON data
//console.log(json_data) returns undefined
});
};
reloadPage();