Ajax:如何正确修改jQuery源代码?

时间:2010-10-20 20:37:44

标签: jquery

我的问题有点奇怪,但我“需要”内部用途更新$ .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 );
        }
    }
}

按此顺序触发更改更为正常,适合我...

我该如何正确地做到这一点? (如果我能......)

感谢。

2 个答案:

答案 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 ///