有JavaScript方法返回jQuery AJAX调用的结果

时间:2013-01-25 22:57:39

标签: javascript jquery ajax

  

可能重复:
  How to return the response from an AJAX call from a function?

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 个答案:

答案 0 :(得分: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
}

答案 1 :(得分:1)

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

话虽这么说,这通常是一个坏主意,可能会以更好的方式处理。通常,这是通过首先执行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'});

答案 2 :(得分: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添加到a​​jax选项中,并使用局部变量(成功和错误处理程序可访问)作为返回值。

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

答案 3 :(得分: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()