是否有可能让jQuery .ajax
调用执行全局 onSuccess 处理程序(现在让我们称之为 onSuccessGlobal )之前> strong>执行本地 onSuccess 处理程序?
基本上,流程应该是:
.ajax
来电(或.get
,.post
等)onSuccessGlobal
处理程序,从请求中传递结果数据。此数据已在此方法中转换。onSuccess
处理程序接收,该处理程序使用数据向页面添加内容等。我知道Ajax events的存在,但是如此AFAIK,它看起来不会ajaxSuccess
事件:
a)在本地success
事件之前调用
b)将修改后的数据发送到本地事件
为了实现类似的功能,我想我可以使用全局ajaxSend
事件来中止当前的ajax请求,使用我需要的处理程序创建一个包装的请求,然后发送新的包装请求。但我希望有人可以提供一些见解,因为这听起来相当复杂。
谢谢!
答案 0 :(得分:0)
我最终做的是覆盖$.ajax
功能。不是很漂亮,但它完成了工作:
// Add `enableAjaxFiltering` & `disableAjaxFiltering` methods to jQuery object
(function( $ ) {
// keep a reference to the old ajax function
var _old = $.ajax;
// use this namespace
$.ajaxFiltering = {};
// this will enable filtering in any $.ajax() call
$.ajaxFiltering.enable = function(filter) {
$.ajax = function(settings) {
if (settings.success) {
var callback = settings.success;
settings.success = function(data) {
newData = filter(data);
return callback(newData);
}
}
return _old.apply(this, [settings]);
}
};
// this will disable filtering in any $.ajax call
$.ajaxFiltering.disable = function() {
$.ajax = function(settings) {
return _old.apply(this, [settings]);
}
};
}( jQuery ));
然后你只需在$.ajaxFiltering.enable(someFilteringFunction)
之前使用启用,其中someFilteringFunction
将负责返回无XSS的JSON。
哦,JS,你有时会有多脏:)