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:
从远程服务器检索数据时(只能使用
script
或jsonp
数据类型),永远不会触发错误回调和全局事件。
【讨论】:
好的,谢谢。我以前从未见过那张纸条。我将改用$.ajax()
函数。
$.getJSON
只是在内部调用$.ajax
。如果只能通过 JSONP 访问 API,则无法让 jQuery 调用错误回调。
我已成功让$.ajax
在 JSONP 链接 404 时运行我的错误处理程序。我用this answer 弄明白了。
啊...好的。这只是因为超时。您仍然不会知道错误实际上是什么。你可能会发现这个插件很有用:github.com/jaubourg/jquery-jsonp.
非常感谢!该插件节省了大量时间,并且完美运行。以上是关于jQuery.getJSON().error() 没有在 404 错误上执行的主要内容,如果未能解决你的问题,请参考以下文章