为请求禁用一些jQuery全局Ajax事件处理程序
Disabling some jQuery global Ajax event handlers for a request
假设我已经定义了一些全局Ajax事件处理程序(ajaxStart, ajaxStop和ajaxError)。通常我很好,但对于一个请求,我想禁用ajaxError处理程序,但仍然像往常一样运行ajaxStart和ajaxStop处理程序。jQuery ajax函数文档中提到了"global"参数,该参数可以设置为false并传递给$。函数来禁用所有全局ajax事件处理程序,但是他们没有提到任何方法来禁用一些全局处理程序。
我可以通过对传递给ajaxError函数的ajaxSettings对象的"url"属性进行测试来防止ajaxError处理程序,但这似乎有些笨拙。这里有人知道一种方法来禁用ajaxError函数从运行,这将是清楚的人看在$所在的地方。正在调用Ajax函数?
我可以提供一个简单的例子,如果有人想看它
这是可能的,也不难做到。
你只需要设置你的全局错误处理程序(.ajaxError
)来接收一些jQuery可以提供给它的参数:
$("div.log").ajaxError(function(evt, xhr, settings) {
if(settings.suppressErrors) {
return;
}
// Normal processing
});
在此之后,您可以将suppressErrors: true
添加到您所做的任何AJAX请求的设置中,如果它失败,错误处理程序将返回而不做它通常做的事情。
查看效果
当您查看来自jquery/ajax源代码https://github.com/jquery/jquery/blob/master/src/ajax.js#L579-582的这个if语句时,它是许多同类语句中的一个,很明显您的问题不能仅通过jquery参数来解决。
我的建议是:set global为false,就像Vaibhav Gupta说的
在特定的ajax调用中将全局处理程序映射到本地,并通过$.event触发全局事件。触发方法
$.ajax({
url: "test.html",
global: false,
beforeSend: function(){$.event.trigger('ajaxStart');},
complete: function(){$.event.trigger('ajaxStop');},
error: your_error_handler
});
尝试在ajax请求中使用global: false
,如:
$.ajax({
url: "test.html",
global: false,
// ...
});
来源:http://docs.jquery.com/Ajax_Events
查找全局事件
可以设置$.event.global.ajaxError
为false
,暂时禁用全局错误回调。使用特殊请求的error
和complete
回调来设置标志:
$.ajax({
url: 'some.domain.com/',
}).error(function(jXHR){
// Disable global error logging
$.event.global.ajaxError = false;
}).complete(function(){
// Enable global error logging
$.event.global.ajaxError = true;
});
在jsFiddle上有一个例子。
既然如此,我想补充一句,我还是更喜欢乔恩的提议。这种技术需要在两个地方设置标志,其中一个可能会被忘记,而另一个可能会意外禁用全局处理程序。另一个原因是Jon的技术应该保证在设置一些内部标志不可靠的jQuery版本中工作。- 没有通过ajax调用设置Javascript全局变量
- Ajax设置全局变量,但外部值消失
- 将 Ajax 数据分配给全局变量时出现问题
- 如何在 ajax 调用后更改包装器 JavaScript 函数中的全局变量
- 全局变量 - AJAX jQuery
- 为什么可以't I存储在全局变量中的Javascript ajax响应
- AJAX全局阵列存储
- jQuery对象、不一致的全局变量和AJAX调用
- 如何通过 ajax 传递全局变量
- 无法多次更新 jQuery 中 Ajax 调用的全局变量
- AJAX 请求无法读取更新的会话/全局变量
- jQuery / JS设置全局变量,但卡在传递给AJAX自定义函数
- jQuery全局Ajax事件处理程序的用例
- 针对特定ajax调用的全局$.ajax事件的触发器函数
- AngularJS.添加全局AJAX错误处理程序(如果尚未定义)
- 全局ajax错误处理程序和闭包
- 调用jQuery ajaxSuccess(或任何全局AJAX事件),即使本地成功(或任何本地AJAX事件)抛出错误
- 为请求禁用一些jQuery全局Ajax事件处理程序
- 设置全局ajax数据类型会中断rails远程链接
- 是否可以使用全局AJAX侦听器来获取AJAX调用的源