4

私は、この関数が ajax 呼び出しが成功したかどうかを返すようにしたいと考えています。これを行う方法はありますか?以下の私のコードはこれを行いません。

function myFunction(data) {
var result = false;
$.ajax({
    type: "POST",
        contentType: "application/json",
        dataType: "json",
        url: "url",
        data: data,
        error: function(data){
             result = false;
             return false;
        },
        success: function(data){
            result = true;
            return true;
        }
     });
     return result;
}
4

5 に答える 5

6

残念ながら、非同期コールバックをラップする関数に値を返すことはできません。代わりに、AJAXリクエストからの成功コールバックは、データと制御を別の関数に渡します。この概念を以下に示しました。

myFunctionの定義:

// I added a second parameter called "callback", which takes a function
 // as a first class object
function myFunction(data, callback) {
    var result = false;
    $.ajax({
        type: "POST",
        contentType: "application/json",
        dataType: "json",
        url: "url",
        data: data,
        error: function(data){
            result = false;

            // invoke the callback function here
            if(callback != null)  {
                callback(result);
            }

            // this would return to the error handler, which does nothing
            //return false;
        },
        success: function(data){
            result = true;

            // invoke your callback function here
            if(callback != null) {
                callback(result);                
            }

            // this would actually return to the success handler, which does
              // nothing as it doesn't assign the value to anything
            // return true;
        }
     });

     // return result; // result would be false here still
}

コールバック関数の定義:

// this is the definition for the function that takes the data from your
 // AJAX success handler
function processData(result) {

    // do stuff with the result here

}

myFunctionを呼び出します。

var data = { key: "value" }; /* some object you're passing in */

// pass in both the data as well as the processData function object
 // in JavaScript, functions can be passed into parameters as arguments!
myFunction(data, processData);
于 2012-05-26T21:57:59.077 に答える
3

コールバックする必要はありません。これは、async プロパティを使用して実現できます。

function myFunction(){
    var retVal;
    $.ajax({
        url:url,
        method: GET/POST,
        data: data,
        async: false,
        success:function(response) {
            retVal = response;
        }
    });
    return retVal;
}
于 2016-04-30T20:01:57.330 に答える
1

AJAX 構成で指定できますasync: falseが、ドキュメントには、これにより AJAX 呼び出し中にブラウザーもロックされることが記載されているため、お勧めしません。

于 2012-05-26T19:07:30.717 に答える
0

役立つこのプロパティを追加してください

async: false
于 2013-12-11T12:01:13.263 に答える
0

いいえ、myFunctionajax 呼び出しは非同期で行われるため、ajax 呼び出しの成功を返すことはできません。

コードは次の順序で実行されます。

  1. var result = false;
  2. $.ajaxリクエストをサーバーに送信します。
  3. return result(これはまだ false に設定されています)。
  4. サーバーからの応答を受信すると、成功またはエラー ハンドラーが含まれているresult = falseresult = true呼び出されます。

これを処理する正しい方法は、ajax コードの結果に依存するすべてのコードを success 関数と error 関数に移動することです。

于 2012-05-26T19:09:20.183 に答える