40

ajax リクエストから値を返す関数が必要です。関数がajax非同期リクエストによって返される値を取得するまで、JavaScriptの実行を停止したい。何かのようなもの:

function myFunction() {
    var data;
    $.ajax({
        url: 'url',
        data: 'data to send',
        success: function (resp) {
            data = resp;
        },
        error: function () {}
    }); // ajax asynchronus request 
    return data; // return data from the ajax request
}
4

5 に答える 5

51

次のようなコールバック関数を登録する必要があります。

function test() {
    myFunction(function(d) {
        //processing the data
        console.log(d);
    });
}

function myFunction(callback) {
    var data;
    $.ajax({
        url: 'url',
        data: 'data to send',
        success: function (resp) {
            data = resp;
            callback(data);
        },
        error: function () {}
    }); // ajax asynchronus request 
    //the following line wouldn't work, since the function returns immediately
    //return data; // return data from the ajax request
}
于 2013-04-06T05:20:31.980 に答える
14

Ajax は非同期です。つまり、ajax 呼び出しはディスパッチされますが、コードは停止することなく以前と同じように実行され続けます。Ajax は、応答が受信されるまで実行を停止/一時停止しません。追加のコールバック関数などを追加する必要があります。

    function myFunction() {
var data;
$.ajax({
    url: 'url',
    data: 'data to send',
    async: false,
    success: function (resp) {
        data = resp;
        callback.call(data);
    },
    error: function () {}
}); // ajax asynchronus request 
return data; // return data from the ajax request
  }
于 2013-04-06T05:20:35.923 に答える
8

asyn = False のようにする必要があります:

$.ajax({
    async: false,
    // ...
    success: function(jsonData) {
    //Your Logic
    }
});
于 2013-04-06T05:19:58.103 に答える
6
$.ajax({
        url: 'url',
        data: 'data to send',
        async: false,
        success: function (resp) {
            data = resp;
        },
        error: function () {}
    }); // ajax synchronus request 
于 2013-04-06T05:18:44.393 に答える
4

async: falseAjax は非同期であるため、ajax リクエストに使用します。

async を false に設定すると、関数内の次のステートメントを呼び出す前に、呼び出しているステートメントが完了する必要があることを意味します。async: true を設定すると、そのステートメントが実行を開始し、async ステートメントがまだ完了しているかどうかに関係なく、次のステートメントが呼び出されます。

jQueryドキュメントから:

デフォルトでは、すべてのリクエストは非同期で送信されます (つまり、これはデフォルトで true に設定されています)。同期リクエストが必要な場合は、このオプションを false に設定します

于 2013-04-06T05:18:38.530 に答える