我的问题有点奇怪,但我“需要”内部用途更新$ .ajax功能。
在原始的jQuery代码中,有:
ajax: function( origSettings ) {
// Some code
function success() {
// If a local callback was specified, fire it and pass it the data
if ( s.success ) {
s.success.call( callbackContext, data, status, xhr );
}
// Fire the global callback
if ( s.global ) {
trigger( "ajaxSuccess", [xhr, s] );
}
}
}
我想将内部success
函数更改为:
ajax: function( origSettings ) {
// Some code
function success() {
// Fire the global callback
if ( s.global ) {
trigger( "ajaxSuccess", [xhr, s] );
}
// If a local callback was specified, fire it and pass it the data
if ( s.success ) {
s.success.call( callbackContext, data, status, xhr );
}
}
}
按此顺序触发更改更为正常,适合我...
我该如何正确地做到这一点? (如果我能......)
感谢。
答案 0 :(得分:0)
你必须像这样覆盖它。
jQuery.ajax =
// Some code
function success() {
// Fire the global callback
if ( s.global ) {
trigger( "ajaxSuccess", [xhr, s] );
}
// If a local callback was specified, fire it and pass it the data
if ( s.success ) {
s.success.call( callbackContext, data, status, xhr );
}
}
不幸的是,除了JS中的Object层之外,没有办法覆盖代码。但是考虑到这不是一个好的做法,因为这会让你失去JQ中任何新的错误修正。
您能更具体地了解您想要实现的功能吗?改变另一方可能更简单吗?
答案 1 :(得分:0)
我找到了一个正确的方法:
$("body").ajaxSend(function(event, XMLHttpRequest, s) {
s._success = s.success;
s.success = $.noop;
s._error = s.error;
s.error = $.noop;
s._complete = s.complete;
s.complete = $.noop;
});
$("body").ajaxSuccess(function(event, XMLHttpRequest, s) {
// Generic code
if(s._success) {
s._success.call(s.context || s, s.data, s.status, XMLHttpRequest)
}
});
/// ajaxError, ajaxComplete ///