【发布时间】:2019-05-27 19:34:37
【问题描述】:
我们有一个错误处理程序来发布消息。
$(document).ajaxError(function (e, xhr, options) {
window.postMessage(....);
});
其中一个 fetch 调用返回 401
this.fetch = function(url) {
return fetch(url, {
}
}).then(function(response) {
return response.json();
})
当我检查响应时,状态为 401,但 response.json() 正在抛出“Uncaught (in promise) SyntaxError: Unexpected end of JSON input.” 因此,ajaxError 没有触发。
预期行为:如果我没有从 fetch 调用中获得状态 200,我希望 document.ajaxError 发布消息。
我们有一个 wrapper.js,它具有覆盖函数
window.fetch = (function(arg) {
}(window.fetch)
我可以在这个函数中全局捕获这个异常吗?
【问题讨论】:
-
如果 jQuery 能够捕获 fetch ajax 调用错误,我会感到惊讶,因为它并非源自 jQuery
-
jsfiddle.net/uxbcLajt 是的,看起来 ajaxError 不会捕获非来自 jQuery 的 ajax 请求的错误
-
另一件事是
fetch不会在401上失败,这意味着它将进入.then回调。当来自 jQuery 的 ajax 或 axios 时,这是违反直觉的。你应该检查response.ok,如果false,你需要手动拒绝。 -
@Taplar 我已对问题描述进行了编辑。您认为这可以在 window.fetch 中全局处理吗?
-
我不清楚该包装器如何改变 ajax 并非源自 jQuery 的事实。编辑:这似乎也是一个逻辑错误,因为您试图定义一个变量,同时还试图将它传递给旨在定义它的 IIFE。
标签: javascript jquery ajax backbone.js chaplinjs