0

重複の可能性:
関数からの AJAX 呼び出しからの応答を返す方法は?

オンラインでファイルから数値データを読み取る機能があります。ファイルは正しく取得されますが (アラートによって表示される値によって証明されます)、出力に設定してから出力を返そうとすると、未定義の結果が得られます。

スコーピング チュートリアルを実行しようとしましたが、役に立ちませんでした。私は何を間違っていますか?

function readFileFromWeb() {
    var output;

    jQuery.get('http://domain.com', function(data) {
        alert(data);
        output = data;
    });

    return output;
}
4

2 に答える 2

3

コールバック関数を介して、これを行う方法は次のとおりです。

function readFileFromWeb(callback) {
    jQuery.get('http://domain.com', function(data) {
        callback && callback(data);
    });
}

// ...

readFileFromWeb(function (data) {
    alert(data);
});

これは、jQuery.getが非同期関数であるためです。つまり、実行中にブロックされないため、すぐに戻ります。そして、それが実際に関数がコールバック関数を必要とする理由です。そのためjQuery.get、AJAXクエリが返されるとコールバック関数が起動されます。

したがって、独自の関数を実装する場合は、同じコールバックパターンを使用する必要がありますreadFileFromWeb

于 2013-01-17T14:59:44.003 に答える
1

非同期です。コードにコメントを付けて、物事が起こっている順序を理解できるようにしました。

function readFileFromWeb() {
    //1. create variable.
    var output;

    //2. make ajax call.
    jQuery.get('http://domain.com', function(data) {
        alert(data);

        //4. set variable from ajax callback
        output = data;
    });

    //3. return variable.
    return output;
}
于 2013-01-17T15:00:44.717 に答える