【问题标题】:.ajax json return on error.ajax json 返回错误
【发布时间】:2011-10-22 21:29:49
【问题描述】:
$.ajax({
    type: 'POST',
    url: api_url+'client/'+client.id+'.json', 
    data: {
        _method: 'delete',
        id: client.id
    },
    success: function(data) {
        $('#delete-client').html('Success');
    },
    error: function(data) {
        $('#delete-client').css('color', 'red');
        $('#delete-client').html('Error');
    }
});

关于错误:函数 jquery 会收到这个带有 500 标头状态的 json 对象

{"errors":{"code":777,"message":"Method requested does not yet exist","data":[]}}

但是,如果我使用 data.errors.message 它不会在那里显示错误。当我 console.log 使用它的返回对象时,它会在 chromes 开发人员框中显示一个带有不同事件的巨大对象

已修复

var error = jQuery.parseJSON(jqXHR.responseText);
$('#delete-client').html(error.errors.message);

【问题讨论】:

  • 如果请求出错,为什么回调会收到任何东西?
  • 我建议您将您的修复放在一个答案中,以便清楚正确答案是什么。我知道这是一个很老的问题,但它在 Google 上的排名很高......

标签: jquery ajax


【解决方案1】:

添加:dataType:"json"........

【讨论】:

  • Chrome 仍然给我: Object abort: function (a){a=a||"abort",p&&p.abort(a),w(0,a);return this} always: function (){return b.done.apply(b,arguments).fail.apply(this,arguments)} 完成:函数 (){if(!d){var c=arguments,g,h,i,j,k ;b&&(k=b,b=0);for(g=0,h=c.length;g
【解决方案2】:

尝试阅读$.ajax documentation

error(jqXHR, textStatus, errorThrown) - 功能

要调用的函数 如果请求失败。该函数接收三个参数:jqXHR (在 jQuery 1.4.x 中,XMLHttpRequest)对象,描述类型的字符串 发生的错误和可选的异常对象(如果有) 发生了。第二个参数的可能值(除了 null)是 “超时”、“错误”、“中止”和“解析错误”。当 HTTP 错误时 发生时,errorThrown 接收 HTTP 状态的文本部分, 例如“未找到”或“内部服务器错误”。从 jQuery 1.5 开始, 错误设置可以接受一个函数数组。每个功能将 依次调用。注意:跨域不调用此处理程序 脚本和 JSONP 请求。这是一个 Ajax 事件。

检查参数列表。那不是你的数据。那是一个 jqXHR 对象。


根据定义,如果您已成功从服务器检索数据,则您拥有的是succeeded,而不是errored。无论是否包含字符串"error",data都是数据。

您仍应使用success 回调,即使您的数据描述了错误。不要发送 500 标头。


$.ajax({
    type: 'POST',
    url: api_url+'client/'+client.id+'.json', 
    data: {
        _method: 'delete',
        id: client.id
    },
    success: function(data) {
        if(data.errors) {
            //Server not able to process the request
        }
        else {
            $('#delete-client').html('Success');
        }
    },
    error: function(data) {
        //AJAX request not completed
        $('#delete-client').css('color', 'red');
        $('#delete-client').html('Error');
    }
});

【讨论】:

  • 部分同意和不同意。如果我的 API 返回除了 200 标头状态之外的任何内容,那么它就是一个错误,这就是 jQuery 如何返回它并将它踢到错误方法。但是,您对 jqXHR 的看法是正确的。
  • @azz0r:我认为您必须在提供 500 错误和发回“错误”数据之间做出选择。 This 可能会有所帮助。
  • 我很笼统,错误代码各不相同(我内置了一个巨大的列表)。不过感谢您的链接,它只是确认我做的事情是正确的。
  • @azz0r:不,你不是。您应该返回 4xx 错误代码,而不是 5xx,因为错误是用户请求错误方法,而不是服务器的
  • @azz0r:对于 4xx 和 5xx 错误,jQuery 会转到 error 处理程序。这就是问题的症结所在。
猜你喜欢
  • 1970-01-01
  • 2010-10-22
  • 2021-04-23
  • 1970-01-01
  • 2012-05-14
  • 2017-06-17
  • 2017-08-02
  • 1970-01-01
  • 2017-11-01
相关资源
最近更新 更多