1

可能重复:
如何从函数的 AJAX 调用返回响应?

function Run(someJsonObject) {
    $.ajax({
        type: "post",
        contentType: "application/json; charset=utf-8",
        url: "/MyWebService",
        data: JSON.stringify(someJsonObject),
        dataType: "json",
        success: function (data) {
            var parsedJson = jQuery.parseJSON(data.d);
            // Do some magic...

            return true; // success!
        },
        error: function (jqXHR, textStatus, errorThrown) {
            return false;
        }
    });

}

var result = Run({dummy:'dummy'});

如果我没记错的话,上面的函数不会返回 true 或 false,而是未定义。我想返回 AJAX 调用的结果,我更愿意让它同步(我意识到我正在使用AJAX)。我将如何做到这一点?

4

4 回答 4

2

你倒退了,让你的ajax先运行。

$(function () {
    $.ajax({
        type: "post",
        contentType: "application/json; charset=utf-8",
        url: "/MyWebService",
        data: JSON.stringify(someJsonObject),
        dataType: "json",
        success: function (data) {
            var parsedJson = jQuery.parseJSON(data.d);
            // Do some magic...
            DoStuffWithResult(data.d);
            return true; // success!
        },
        error: function (jqXHR, textStatus, errorThrown) {
            return false;
        }
    });
});

function DoStuffWithResult(result){
    //time to rock, i have my result
}
于 2013-01-25T23:02:41.880 回答
1

如果您将async选项添加到您的 jquery 调用中,它将停止异步。

话虽如此,这通常是一个坏主意,可能可以用更好的方式处理。通常,这是通过首先进行 ajax 调用并在成功函数中处理数据来完成的。

但是,如果您真的坚持要这样做,那么这就是您想要的:

function Run(someJsonObject) {
     var result;
     $.ajax({
        async: false,
        type: "post",
        contentType: "application/json; charset=utf-8",
        url: "/MyWebService",
        data: JSON.stringify(someJsonObject),
        dataType: "json",
        success: function (data) {
            var parsedJson = jQuery.parseJSON(data.d);
            // Do some magic...

            result = true; // success!
        },
        error: function (jqXHR, textStatus, errorThrown) {
            result = false;
        }
    });
    return result;
}

var result = Run({dummy:'dummy'});
于 2013-01-25T23:06:59.703 回答
0

你可以简化

$.post('/MyWebService', JSON.stringify(someJsonObject), function(r) {
   if(r.success) {
       // do something (1)
   } else {
       // do else something (2)
   } 
},'json').error(function() { 
   alert('comunication error');
 });

如果你得到任何这样的回应

{ "success": true, data: "my_data" }

执行某事 (1) 否则 (2)

如果不是有效的 json 或超时触发器 .error()

于 2013-01-25T23:14:49.920 回答
0

如果您想在 jquery 中同步发出 ajax 请求并将其作为返回值Run

function Run(someJsonObject) {
    var returnValue;
    $.ajax({
        type: "post",
        async: false,
        contentType: "application/json; charset=utf-8",
        url: "/MyWebService",
        data: JSON.stringify(someJsonObject),
        dataType: "json",
        success: function (data) {
            var parsedJson = jQuery.parseJSON(data.d);
            // Do some magic...

            returnValue = true; // success!
        },
        error: function (jqXHR, textStatus, errorThrown) {
            returnValue = false;
        }
    });
    return returnValue;

}

我添加async: false到 ajax 选项并使用局部变量(成功和错误处理程序可访问)作为返回值。

你不能只返回$.ajax(/* snip */),因为它返回一个 promise 对象。

于 2013-01-25T23:10:53.210 回答