为请求禁用一些jQuery全局Ajax事件处理程序
假设我定义了一些全局的Ajax事件处理程序(ajaxStart,ajaxStop和ajaxError)。 通常我很好,但对于一个请求,我想禁用ajaxError处理程序,但仍照常运行ajaxStart和ajaxStop处理程序。 jQuery ajax函数文档提到了可以设置为false的“global”参数,并将其传递给$ .ajax函数以禁用所有全局Ajax事件处理程序,但是他们没有提及任何只禁用某些全局处理程序的方法。
我可以通过对传递给ajaxError函数的ajaxSettings对象的“url”属性进行testing来阻止ajaxError处理程序,但这看起来有些笨拙。 有没有人在这里知道一种方法来禁用ajaxError函数运行,这将清楚的人看看$ .ajax函数被调用的地方?
我可以提供一个简单的例子,如果有人想看到它。
这是可能的,也不难做到。
您只需要设置您的全局error handling程序( .ajaxError
)来接收jQuery可以提供给它的一些参数:
$("div.log").ajaxError(function(evt, xhr, settings) { if(settings.suppressErrors) { return; } // Normal processing });
在此之后,你可以添加suppressErrors: true
到你所做的任何AJAX请求的设置,如果失败,error handling程序将返回,而不会执行通常的操作。
看到它的行动 。
当你从jquery / ajax源码https://github.com/jquery/jquery/blob/master/src/ajax.js#L579-582看这个if语句时,它是很多同类中的一种,很明显,你的问题不能单靠一个jquery参数来解决。;
我的build议是:
-
像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 });
您可以将$.event.global.ajaxError
设置$.event.global.ajaxError
false
以禁用暂时调用全局错误callback。 使用error
并complete
特殊请求的callback来设置标志:
$.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上有一个例子。
提出这个问题,我想补充一点,我仍然会select乔恩的build议。 这个技巧要求在两个地方设置标志,你可以忘记一个标志和最多全局处理程序被意外closures。 另一个原因是Jon的技术应该保证能够跨越jQuery的版本,其中设置一些内部标志是不可靠的。
尝试在您的ajax请求中使用global: false
:
$.ajax({ url: "test.html", global: false, // ... });
源:: http://docs.jquery.com/Ajax_Events
寻找全球事件。
- 如何检测JavaScript中的URL更改
- 我怎么能添加一个自定义的HTTP头到js或jQuery的Ajax请求?
- 问题返回JSON值
- 复杂types在ApiController参数中变为空
- 在请求的资源AngularJS上没有“Access-Control-Allow-Origin”标题
- 我怎样才能asynchronous上传文件?
- 如何在多值select中设置select的值在Jquery-Select2中。
- AJAX请求callback使用jQuery
- 从ASP.NET MVC 3开始,MicrosoftAjax.js,MicrosoftMvcAjax.js和MicrosoftMvcValidation.js是否被废弃?