如何防止覆盖jQuery的$ .ajaxSetup()选项?

时间:2011-01-15 23:40:18

标签: jquery ajax

我有一个关于ajaxSetup的问题。脚本启动时,我定义以下内容:

$.ajaxSetup({
  success: function(data) {
    example(); 
  }
});

到这里一切正常。问题始于使用Ajaxify,它覆盖了成功函数。

我该怎样防止这种情况?是否有可能执行这两个函数或将设置成功函数添加到我在主AJAX请求中调用的那个函数?

4 个答案:

答案 0 :(得分:4)

使用ajaxsetup中定义的回调函数 定义

$.ajaxSetup({
    beforeSend      : function() {
        $('#ajaxLoader').show();
        ...
    }
});

稍后再打电话

$.ajax({
    beforeSend: function() {
        $.ajaxSettings.beforeSend();
        // do other
        ...
    }
});    

答案 1 :(得分:3)

在jquery-1.4.2.js的源代码中添加“yourFunction()”:

function success() {

 yourFunction();    

 // 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] );
 }

}

编辑:

在jquery-1.5.1.js的源代码中添加“yourFunction()”:

if (isSuccess) {

 yourFunction();

 deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
} else {
 deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
}

答案 2 :(得分:1)

http://api.jquery.com/Ajax_Events/

您可以使用这种方式使用全局事件(如下所列),而不是使用ajaxSetup。这样,本地人就不会“覆盖”全局的那个。它们都将被执行。

在文档上触发全局事件,调用可能正在侦听的任何处理程序。您可以像这样监听这些事件:

// the global event for success is "ajaxSuccess"
$(document).bind("ajaxSuccess", function(){
    // do your function
});

答案 3 :(得分:0)

由于$.ajaxSetup旨在覆盖旧设置,因此预防它会涉及建议修改jQuery或Ajaxify插件代码。相反,你不能只使用Ajaxify自己的onSuccess属性吗? (见:http://max.jsrhost.com/ajaxify-jquery-plugin/

$('.trigger').ajaxify({
    target: '#element',
    onSuccess: function( options, data ) {
        example();
    }
});