如何将jQuery.ajax()中的成功和错误处理程序中的值返回到父方法?

时间:2011-07-19 18:42:11

标签: javascript jquery ajax

好的,为了争论,让我们说AJAX调用必须是异步的

基本上,我有一个jQuery AJAX调用,我希望成功和错误处理程序将值返回到父方法:

以下代码不起作用,因为AJAX调用是异步的。因此,在收到repsonse之前返回函数底部的返回值:

var isValid = false;

$.ajax({
    type: "POST",
    url: myurl,
    dataType: "JSON",
    data: $myData,
    async: true,
    success: function(data) {
        isValid = true;
    },
    error: function() {
        isValid = false;
    }
});

return isValid;

那么,有没有办法将值BACK传递给异步AJAX调用的调用方法?

4 个答案:

答案 0 :(得分:1)

该行

Return isValid; 

将在调用完成之前执行,因为它是异步的。

使用

async: false,

答案 1 :(得分:1)

这是我提出的解决问题的解决方案....(感谢@Rodaine给我的想法!)

在调用方法中,我指定了一个回调函数。这是包含AJAX调用的插件:

function ajaxCall(options) {
    var url = options["url"] === undefined ? "" : options["url"];
    var addLink = options["addLink"] === undefined ? "" : options["addLink"];

    var $form = $(this).closest("form");
    var $formParamsString = $form.serialize();

    var aSuccess = [];
    var aError = [];

    if ($.isFunction(options["success"])) 
        aSuccess.push(options["success"]);

    if ($.isFunction(options["error"])) 
        aError.push(options["error"]);

    $.ajax({
        type: "POST",
        url: url,
        dataType: "JSON",
        data: $formParamsString,
        async: true, // Asynchronous to allow for loading image
        success: aSuccess,
        error: aError
    });
}

现在,当我调用此函数时,我可以在选项Object:

中指定回调
ajaxCall({
    url: "myWebService.cfm",
    success: function() {
        alert("We did it!");
    },
    error: function() {
        alert("Try again, fool!");
    }
});

答案 2 :(得分:0)

你不能这样做,因为isValid总是假的。

如果您在成功/失败后需要做某事,您应该这样做:

success: function(data) {
    isValid = true;
    otherFunction(isValid);
},
error: function() {
    isValid = false;
    otherFunction(isValid);
}

通过这种方式,您可以处理不同的案例

答案 3 :(得分:-1)

使用synchronouse ajax call

将async设置为false。