返回JQuery ajax调用的值

时间:2012-05-26 19:04:42

标签: jquery ajax 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;
}

5 个答案:

答案 0 :(得分:4)

不幸的是,您无法将值返回到包装异步回调的函数。相反,您从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);

答案 1 :(得分:1)

您可以在AJAX配置中指定async: false,但文档指出这也将在AJAX调用期间锁定浏览器,因此不建议这样做。

答案 2 :(得分:1)

无需回电。您可以使用async属性来实现此目的。

function myFunction(){
    var retVal;
    $.ajax({
        url:url,
        method: GET/POST,
        data: data,
        async: false,
        success:function(response) {
            retVal = response;
        }
    });
    return retVal;
}

答案 3 :(得分:0)

不,myFunction无法返回ajax调用的成功,因为ajax调用是异步完成的。

您的代码将按此顺序执行:

  1. var result = false;
  2. $.ajax将请求发送给服务器。
  3. return result(仍设为false)。
  4. 当收到服务器的响应时,将调用包含result = falseresult = true的成功或错误处理程序。
  5. 处理此问题的正确方法是将任何依赖于ajax代码结果的代码移动到成功和错误函数中。

答案 4 :(得分:0)

添加这个帮助你的属性

async: false