Eli*_*ria 43 javascript ajax jquery
假设我定义了一些全局Ajax事件处理程序(ajaxStart,ajaxStop和ajaxError).通常我对此很好,但对于一个请求,我想要禁用ajaxError处理程序,但仍像往常一样运行ajaxStart和ajaxStop处理程序.在jQuery的AJAX功能的文件中提到,可以设置为false,并传递到$就功能禁用所有全局AJAX事件处理程序的"全球性"的参数,但他们没有提及任何办法只能禁用一些全球处理器.
我可以通过对传递给ajaxError函数的ajaxSettings对象的"url"属性进行测试来阻止ajaxError处理程序,但这看起来有点笨拙.这里有没有人知道一种方法来禁止运行ajaxError函数,这对于那些正在调用$ .ajax函数的地方的人来说是很清楚的吗?
如果有人想看,我可以提供一个简单的例子.
Jon*_*Jon 94
这可能并不困难.
您只需要设置全局错误处理程序(.ajaxError)以接收jQuery可以提供给它的一些参数:
$("div.log").ajaxError(function(evt, xhr, settings) {
if(settings.suppressErrors) {
return;
}
// Normal processing
});
Run Code Online (Sandbox Code Playgroud)
在此之后,您可以添加suppressErrors: true您所做的任何AJAX请求的设置,如果失败,错误处理程序将返回而不执行正常操作.
top*_*pek 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
});
Run Code Online (Sandbox Code Playgroud)
您可以设置$.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;
});
Run Code Online (Sandbox Code Playgroud)
jsFiddle上有一个例子.
在提出这个问题时,我想补充一点,我仍然会更喜欢Jon的建议.这种技术需要将标志设置在2个位置,您可以忘记一个并且最多可以意外地禁用全局处理程序.另一个原因是Jon的技术应该保证在jQuery版本中工作,其中设置一些内部标志是不可靠的.
尝试global: false在你的ajax请求中使用,如:
$.ajax({
url: "test.html",
global: false,
// ...
});
Run Code Online (Sandbox Code Playgroud)
source :: http://docs.jquery.com/Ajax_Events
寻找全球活动.