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 はAsynchronous JavaScript and XMLの略です。AJAX 呼び出しを実行した瞬間にデータをすぐに利用できるわけではないため、コールバック関数を使用して後の応答に対応する必要があります。

jQuery AJAX 呼び出しは、使用できるDeferred Objectを提供します。

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

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

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

$.getJSONJSON を返すのではなく、promise を返します。

最も簡単なのは、次のように使用することです。

 $.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 に答える