【问题标题】:How can I detect a jQuery ajax error response?如何检测 jQuery ajax 错误响应?
【发布时间】:2013-02-12 10:07:47
【问题描述】:

我能够检测到成功响应,但无法检测到错误。我的代码:

$.ajax({
        url: url,
        dataType: 'jsonp',      
        success: function(data){
            $.each(data, function(a, b) { 
                if(b=="Processing post"){
                    $("#post_response").html('Your comment will be added soon...'); 
                }
                else if(b=="In moderation"){
                    $("#post_response").html('Your comment has been placed in moderation...');  
                }
            })
        },
        error: function(xhr, testStatus, error) {
            alert("error");
        }
    });

这些是我收到的回复。我可以检测到前 2 个响应,但我什至无法提醒最后一个响应的“错误”。

jQuery191004289518775843171_1361906819321({"Message":"Processing post","Code":202})

jQuery191006158838421090984_1361907415719({"Message":"In moderation","Code":202})

jQuery191006158838421090984_1361907415719({"Message":"Not logged in","Code":403})

你能看出我哪里错了吗?

【问题讨论】:

  • 您无法使用 JSONP 捕获请求错误。如果服务器除了 jsonp 之外还返回 403 的文本状态,jQuery 将无法处理它。
  • 你有没有断言success 在第三种情况下没有被调用?尝试添加console.logalert
  • 我尝试添加 else if(b=="Not logged in"){$("#post_response").html('You are not logged in'); } 到成功,但它没有被拿起。
  • 如何修改我的代码以获取“未登录”?

标签: jquery api jsonp http-status-codes


【解决方案1】:

错误回调仅用于服务器错误响应(即 HTTP 状态代码 4xx/5xx 错误)。由于您的所有三个响应都是有效的(即它们返回 HTTP 状态代码 200),它们会触发成功回调。

【讨论】:

  • 另外,注意触发错误响应的原因会很有帮助。最值得注意的是 http 标头 500 和 404。有关更多信息,请查看此处的文档:api.jquery.com/jQuery.ajax
  • 谢谢...我刚刚编辑了答案以包含该详细信息。但是,我找不到故障状态代码的确切列表。我一直以为都是 4xx 和 5xx 码。
  • 刚刚检查了jquery的代码,你是对的,下面的if语句检查它是否成功: status >= 200 && status
  • Firebug 显示状态为 202 Accepted(用于“处理中”和“In moderation”),403 Forbidden(用于“未登录”)
猜你喜欢
  • 2011-05-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-10
  • 2012-02-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多