【问题标题】:How to return data in jQuery Ajax? [duplicate]如何在 jQuery Ajax 中返回数据? [复制]
【发布时间】:2015-03-27 15:01:45
【问题描述】:

假设我有一个简单的功能:

    function test(url){
var AjaxCall = $.ajax({
        type: GET,
        url: url,
        data: {},
        success: function(data,status,xhr){
             return xhr
        },
        error: function(xhr,e){
             return xhr
        }
});


    if(xhr.status === 200)console.log('success');


}

所以我想要的是处理函数内部的错误而不是在调用它并在调用中添加回调以处理这些错误之后,例如,这可能吗?

【问题讨论】:

  • 我认为你这样做了,如果我理解正确的话,在你传递的数组中;错误和成功地传递一个匿名函数(就像你正在做的那样)并处理你想要的一切
  • 是的,但是如果我做return xhr 然后在调用函数做var x = test(url); console.log(x); 得到结果时成功;
  • 为什么不把 if 语句移到成功回调中?
  • 你是在同步通信之后吗?如果是这样,你能解释一下原因吗?

标签: javascript jquery ajax jqxhr


【解决方案1】:

如果你使用低于 1.8 的 jQuery,可以通过设置 async = false

  function test(url){
var AjaxCall = $.ajax({
        type: GET,
        url: url,
        async : false
        data: {},
        success: function(data,status,xhr){
             return xhr
        },
        error: function(xhr,e){
             return xhr
        }
});
}

请注意,这已被弃用,并且有充分的理由

从 jQuery 1.8 开始,使用 async: false 和 jqXHR ($.Deferred) 是 已弃用;您必须使用成功/错误/完成回调选项 而不是jqXHR对象的相应方法如 jqXHR.done() 或已弃用的 jqXHR.success()。

http://api.jquery.com/jquery.ajax/

function test(url){
    var AjaxCall = $.ajax({
            type: GET,
            url: url,
            data: {},
            complete: function(xhr, status){
                 if(xhr.status === 200)console.log('success');
            }
    });
}

不,你不能用这个方法从你的函数中返回一个值。这不是异步的工作方式。如果要返回,则必须设置 async = false ,这样就违背了使用 ajax 的目的。

【讨论】:

  • 是的,我确实知道,但是还有其他解决方案吗?
  • 是的,解决方案是“你必须使用成功/错误/完成回调选项而不是jqXHR对象的相应方法,例如jqXHR.done()或不推荐使用的jqXHR.success() 。”
  • 你能给那些sn-p吗?
  • 检查我的更新答案
猜你喜欢
  • 1970-01-01
  • 2013-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多