0

可能重复:
除了函数本身,不能在 jQuery 的 .ajax 方法中使用返回的数据

我正在尝试将 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 数据。

知道如何使它工作吗?

4

4 回答 4

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);
于 2013-01-06T20:19:04.303 回答
3

AJAX 代表异步JavaScript 和 XML。在您执行 AJAX 调用时,您的数据不会立即可用,因此您需要使用回调函数来响应稍后的响应。

jQuery AJAX 调用提供了您可以使用的延迟对象。

var getJSONData = function(){
    return $.getJSON('/api');
};

var reloadPage = function(data){
    console.log(data);
};

getJSONData().done(reloadPage);
于 2013-01-06T20:20:59.177 回答
2

$.getJSON不返回 JSON 而是一个承诺。

最简单的方法是像这样使用它:

 $.getJSON('/api', reloadPage);

reloadPage当浏览器收到响应时,将使用 JSON 数据作为参数调用您的函数。

于 2013-01-06T20:21:18.030 回答
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();
于 2013-01-06T20:21:59.250 回答