调用jQuery ajaxSuccess(或任何全局AJAX事件),即使本地成功(或任何本地AJAX事件)抛出错误
Invoke jQuery ajaxSuccess (or any global AJAX event) even if the local success (or any local AJAX event) throws an error
文档中没有提到,但显然,如果本地AJAX成功处理程序抛出错误,即使全局ajaxSuccess处理程序也不会被调用。有没有办法绕过这个机制,因为如果你想分发一个JS库或util函数在ajaxSuccess上做一些事情,你不一定能控制成功处理程序,并确保它不会引发异常。
$(document).ajaxSuccess(function(ev, jqXHR, settings) {
console.log('ajaxSuccess called!'); // does not get called
});
$.ajax({
'url': '/',
'type': 'GET',
'success': function (response) {
console.log('success called!');
throw new Error();
}
});
CodePen: http://codepen.io/anon/pen/Ldybr
以下是部分解释您面临的问题的文档:
…success(本地事件)
此事件仅在请求成功时调用(服务器没有错误,数据没有错误)。
ajaxSuccess(全局事件)
此事件也仅在请求成功时调用。
error (Local Event)
此事件仅在请求发生错误时被调用(请求不可能同时发生错误和成功回调)。
ajaxError(全局事件)
此全局事件的行为与本地错误事件相同。
这是正常的事件流,即任何全局事件都在 local之后调用。但是,如果任何回调抛出异常,则不会调用其他回调,因为jQuery内部不会将回调封装在try-catch中(尽管您可以在回调中本地执行此操作)。
正如我在注释中提到的,另一个解决方案是ajax选项的dataFilter属性,它允许您在调用任何本地回调(成功或错误)之前执行所需的操作。下面是我对这个问题的评论,以防万一:
$.ajaxSetup({
dataFilter: function(data, type) {
console.log('dataFilter called!');
return data;
}
});
相关文章:
- jQuery绑定了没有DOM元素的AJAX事件
- Asp.net Ajax事件句柄如何与DOM事件协同工作
- jQuery——更改SELECT中的值不会触发AJAX事件
- IE 的行为与 jQuery change/ajax 事件不一致
- 当开机自检失败时,调用哪种类型的 AJAX 事件
- 如何在 AJAX 事件完成之前暂停提交事件
- jQuery Ajax 事件绑定
- jQuery全局Ajax事件处理程序的用例
- 捕获无输入字段的按键ajax事件
- HTML拖放OnDrop Ajax事件
- 针对特定ajax调用的全局$.ajax事件的触发器函数
- <李>ajax[事件委派问题]后点击功能不起作用
- Ajax事件只工作一次
- Ajax事件处理程序不更新变量
- jQuery.AngularJS中的ajaxStart等效函数| AngularJS中的Ajax事件处理程序
- 调用jQuery ajaxSuccess(或任何全局AJAX事件),即使本地成功(或任何本地AJAX事件)抛出错误
- 如何创建脊柱模型没有自动转发ajax事件到服务器的脊柱
- 是否可以用ajax事件显示php内容?
- 在Rails 4上没有从设计登录表单接收ajax事件
- 可以一个jQuery ajaxSuccess函数通知在另一个(javascript)文件的AJAX事件?如果是这样,我做