2011-06-30 93 views
2

我想覆盖jQuery ajax函数来处理成功事件的默认操作,但也执行我在options参数中使用的回调函数。 目的是在响应中返回标签,我总是希望从其他地方除去响应。覆盖Ajax成功事件

的情况是:

  • 阿贾克斯提交
  • 阿贾克斯成功
  • --default成功操作
  • --Call阿贾克斯成功回调

谁能帮助? 我试图延长

  • jQuery.ajax
  • jQuery.ajaxSuccess
  • jQuery.ajax.done

我的代码是:

var _ajaxSuccess = jQuery.fn.ajaxSuccess; 
$.fn.extend({ 
    ajaxSuccess: function (a) 
    { 
     _ajaxSuccess.apply(this, a); 
    } 
}); 
+0

请张贴您的代码。 –

回答

5

有全球ajaxSuccess回调:

每当一个Ajax请求成功完成,jQuery的触发事件ajaxSuccess。任何和所有已在.ajaxSuccess()方法中注册的处理程序都会在此时执行。

这样可以让您在每次成功的AJAX调用中调用您自己的函数,而不会干扰通常的成功回调。

还有各种其他global AJAX event handlers,你可能也想看看。

如果这些回调没有合适的时机,或者你的能力,那么你可以编写自己的包装器$.ajax和使用:

function wrapped_ajax(options) { 
    var success = options.success; 
    options.success = function(data, textStatus, jqXHR) { 
     // Do whatever needs to be done here. 
     if(success) 
      success(data, textStatus, jqXHR); 
    }; 
    return $.ajax(options); 
} 

你可以做任何你需要平时的成功回调调用原始成功回调之前的参数。您可以拨打wrapped_ajax,方法与$.ajax完全相同。您也可以使用相同的技术来挂钩其他回调。

+0

欢呼这些是我所寻找的路线,但他们对我来说太晚了。我想抓住响应去掉我需要的东西,然后使用回拨功能。 – Qpirate

+0

@Qpirate:我添加了一个可能完成工作的更新。只是'$ .ajax'的简单包装。如果需要的话,你可以猴子补丁你的jQuery来使用你的'wrapper_ajax'来代替它自己,但需要一些小心,我不会建议它。 –

+0

这完全解决了这个问题,非常感谢在过去的几天里一直在努力。 – Qpirate

1

尝试jQuery.ajaxSetup它可以帮助你,了解它here

+0

谢谢@Miroprocessor,但这只是默认设置,我的成功功能将覆盖它。但你可能已经给了我一个关于如何去做的想法。欢呼声 – Qpirate