2011-06-30 92 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