2

ネストされた ajax 呼び出しからデータを返す必要がありますが、非同期のままにするために ajax 呼び出しも必要です。

関連する質問をいくつか見つけましたが、以下の状況では機能しません。ajaxreturnData呼び出しが完了する前に返されていると思いますが、解決策が見つかりません。

function makeRequest(command, postData){

    var returnData;

    $.ajax({

        url: 'call.php?command='+command,
        data: postData,
        type: 'POST'

    }).done(function(data){
        returnData = data;
    });

    return returnData;
}
4

3 に答える 3

4

はい、この呼び出しは非同期なので returnData はすぐに返されます。returndata を使用する必要がある場合は、コールバックの関数に渡します

function makeRequest(command, postData, functionToCallAfterAjax){

    var returnData;

    $.ajax({

        url: 'call.php?command='+command,
        data: postData,
        type: 'POST'

    }).done(function(data){
        functionToCallAfterAjax(data);
    });


}

もちろん、呼び出す関数をパラメーターとして渡すこともできます。

これは、コードが次のことを意図していた場合を意味します。

var returnedData = makeRequest(command, postData);
anotherFunction(returnedData);

簡単に行う必要があります(上記のコードを使用)

makeRequest(command, postData, anotherFunction);

そしてすべてがうまくいく

于 2012-04-17T10:24:28.517 に答える
0

できません。非同期イベントはそのようには機能しません。

HTTP リクエストが送信され、それをトリガーする関数がすぐに続行されます。コールバックは、HTTP 応答が到着するまで起動されませんが、呼び出し元の関数が終了するまでは発生しません。

done()さらに処理が必要な場合は、コールバック ( に渡す関数) を実行する必要があります。

于 2012-04-17T10:23:48.643 に答える
0

関数が実行さreturnDataれる前の値を返しています。.done()受信したデータを関数に渡して処理することにより、コードを修正します。

function makeRequest(command, postData){
    $.ajax({
        url: 'call.php?command='+command,
        data: postData,
        type: 'POST'
    }).done(function(data){
        HandleCallBack(data);
    });
}
于 2012-04-17T10:24:04.927 に答える