【问题标题】:How to handle 404 error with jQuery $.ajax()如何使用 jQuery $.ajax() 处理 404 错误
【发布时间】:2012-04-20 10:32:04
【问题描述】:

为了测试当我尝试加载不存在的资源(与我的网络服务器在同一主机上)时会发生什么,我设置了以下代码:

var wrongURL = "http://foo/bar.json"; // non-existent resource
$.ajax({
    url: wrongURL,
    dataType: 'json',
    success: function(jsonResponse, textStatus, jqXHR) {
        $.('#divOfInterest').html("you should never see this");
    },
    error: function(jqXHR, textStatus, errorThrown) {
        $.('#divOfInterest').html("sorry, could not find URL");
    }
});
// remainder of code...

我没有看到我的 div 显示消息 sorry, could not find URL,而是收到控制台错误:

GET http://foo/bar.json 404 (Not Found) - bar.json

error 调用中和$.ajax() 块之后的任何内容(即// remainder of code)都不会被执行

我的浏览器 (Safari 5.1.5) 似乎卡在 404 错误上并提前退出该功能。

如何优雅地处理错误并执行我的其余代码?

【问题讨论】:

  • 它也在 safari 5.0.2 上运行

标签: jquery ajax http-status-code-404


【解决方案1】:

据我了解,您需要一个服务器来实际返回错误状态以运行该错误函数。

例如,如果您为 Soundcloud 上不存在的用户请求 JSON 对象,您将收到从服务器返回的 404 错误。

但是你们中的任何一个错误地输入了完整的 URI,然后根本没有返回任何资源,也没有状态码。

【讨论】:

  • 其实是有状态的,是零。只需检查 jqXHR.status === 0
【解决方案2】:

只需将$.('#divOfInterest') 替换为$('#divOfInterest') :D

演示:http://jsfiddle.net/9Ua8J/

【讨论】:

  • 带点显示错误:XML filter is applied to non-XML value 无输出,请参见此处:jsfiddle.net/SuHDP
  • 是的,这是假设 ajax 调用实际上进入了回调。但请仔细阅读问题:尝试连接到不存在的资源时 JavaScript 崩溃。此外,我设法在 Chrome 上重现了错误(使用正确的 JS),尽管 jsFiddle 的工作原理更加陌生。
  • 我已经设法使用固定代码让它在 jsfiddle 之外工作......所以我猜 jQuery 会正确处理事件。看起来这是错误的原因。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-09-26
  • 2012-02-07
  • 2012-02-25
  • 2011-03-25
  • 1970-01-01
  • 1970-01-01
  • 2012-07-27
相关资源
最近更新 更多