jQuery.getJSON().error() 没有在 404 错误上执行

Posted

技术标签:

【中文标题】jQuery.getJSON().error() 没有在 404 错误上执行【英文标题】:jQuery.getJSON().error() isn't being executed on 404 error 【发布时间】:2012-12-31 11:54:26 【问题描述】:

这是我的代码的简要概述:

$.getJSON(json_url, function(data) 
    // application logic
).error(function() 
    console.log("error");
);

问题是当服务器返回 404 错误时,它似乎没有被处理,因为没有 console.log() 说错误,但是出现了一个 GET 请求失败,代码为 404 (Not Found) 出现在安慰。

我正在使用 jQuery 1.9.0。

我犯了一些简单的错误吗?

【问题讨论】:

尝试.fail 而不是.error...后者已被弃用(尽管这并不意味着它不起作用)。 这似乎也不起作用。是否有另一种方法可以代替 JSONP 的 getJSON?此外,jQuery 文档在 getJSON 页面上说错误,为什么这会起作用,但文档说的不起作用? 你确定是 404 而不是 JSON 语法错误,会静默失败吗? 这是 JSONP,会有什么不同吗?使用回调函数它不是有效的 JSON,但没有它它是有效的。我正在调用 Twitter API,如果这有影响的话。 据我了解,如果存在callback="..." 函数,Twitter 将使用 JSONP 进行响应。同样,如果存在callback="...",jQuery 会将请求作为 JSONP 处理。我认为 404 的问题在于服务器可以返回 html(包含标记错误消息的页面)。 This question 提出了同样的问题 - 你也许可以从答案中收集到一些东西(但不幸的是没有被接受)。 【参考方案1】:

由于 JSONP 请求的性质,不会为这些请求调用错误回调。

来自docs:

从远程服务器检索数据时(只能使用scriptjsonp 数据类型),永远不会触发错误回调和全局事件。

【讨论】:

好的,谢谢。我以前从未见过那张纸条。我将改用$.ajax() 函数。 $.getJSON 只是在内部调用$.ajax。如果只能通过 JSONP 访问 API,则无法让 jQuery 调用错误回调。 我已成功让$.ajax 在 JSONP 链接 404 时运行我的错误处理程序。我用this answer 弄明白了。 啊...好的。这只是因为超时。您仍然不会知道错误实际上是什么。你可能会发现这个插件很有用:github.com/jaubourg/jquery-jsonp. 非常感谢!该插件节省了大量时间,并且完美运行。

以上是关于jQuery.getJSON().error() 没有在 404 错误上执行的主要内容,如果未能解决你的问题,请参考以下文章

jQuery $.getJSON() 失败

jQuery:请求 getJSON + SunlightLabs API 帮助

jQuery 返回 $.getJSON 值

jQuery.getJSON 不会触发回调

jQuery $.getJSON 和遍历数组正在倾尽全力

jQuery getJSON 超时