假设我定义了一些全局Ajax事件处理程序(ajaxStart,ajaxStop和ajaxError)。通常我对此很好,但对于一个请求,我想要禁用ajaxError处理程序,但仍像往常一样运行ajaxStart和ajaxStop处理程序。 jQuery ajax function documentation提到了“global”参数,该参数可以设置为false并传递给$ .ajax函数以禁用所有全局Ajax事件处理程序,但是他们没有提到任何只禁用某些全局处理程序的方法。 / p>
我可以通过对传递给ajaxError函数的ajaxSettings对象的“url”属性进行测试来阻止ajaxError处理程序,但这看起来有点笨拙。这里有没有人知道一种方法来禁用运行中的ajaxError函数,这对某些人来说是很清楚的 在调用$ .ajax函数的地方?
如果有人想看到它,我可以提供一个简单的例子。
答案 0 :(得分:92)
这可能并不困难。
您只需设置全局错误处理程序(.ajaxError
)即可接收jQuery可为其提供的一些参数:
$("div.log").ajaxError(function(evt, xhr, settings) {
if(settings.suppressErrors) {
return;
}
// Normal processing
});
在此之后,您可以将suppressErrors: true
添加到您所做的任何AJAX请求的设置中,如果失败,错误处理程序将返回而不执行正常操作。
<强> See it in action 强>
答案 1 :(得分:15)
当您查看来自jquery / ajax源https://github.com/jquery/jquery/blob/master/src/ajax.js#L579-582的if语句时,它是许多同类中的一种,很明显单独使用jquery参数无法解决您的问题。
我的建议是:
将全局设为假,如Vaibhav Gupta所说
在特定的ajax调用中将您的全局处理程序映射到本地,并通过$ .event.trigger方法触发全局事件
样品:
$.ajax({
url: "test.html",
global: false,
beforeSend: function(){$.event.trigger('ajaxStart');},
complete: function(){$.event.trigger('ajaxStop');},
error: your_error_handler
});
答案 2 :(得分:8)
尝试在您的ajax请求中使用global: false
,例如:
$.ajax({
url: "test.html",
global: false,
// ...
});
source :: http://docs.jquery.com/Ajax_Events
寻找全球活动。
答案 3 :(得分:8)
您可以将$.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的建议。这种技术需要将标志设置在2个位置,您可以忘记一个并且最多可以意外地禁用全局处理程序。另一个原因是Jon的技术应该保证在jQuery版本中工作,其中设置一些内部标志是不可靠的。