JQuery ajax调用的返回值

han*_*nsi 4 ajax jquery return

无论 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;
}
Run Code Online (Sandbox Code Playgroud)

jmo*_*253 5

不幸的是,您不能将值返回给包装异步回调的函数。相反,来自 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
}
Run Code Online (Sandbox Code Playgroud)

回调函数定义:

// 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

}
Run Code Online (Sandbox Code Playgroud)

调用你的 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);
Run Code Online (Sandbox Code Playgroud)