2012-11-25 48 views
1

我在頁面中有十幾個ajax調用,所有調用都有不同的目的。我想知道我是否可以編寫一個可以捕獲頁面上的任何ajax調用響應的函數。如果響應是文本「Catch me」,該函數將阻止默認的ajax成功函數並提醒「Caught」;如果不是,則遵循默認成功功能。所有Ajax響應的共同處理程序

基本上,我可以編寫一個函數來捕獲頁面上的所有ajax調用並檢查它們的響應文本。

一個單調乏味的方法是編輯每個ajax調用,但我試圖避免這種情況。

+0

您可以創建一個處理程序回調,但這取決於你現有的結構。您幾乎肯定會需要重構現有的代碼以適應常見的處理程序。沒有看到特定的代碼,我們無法提供幫助。 –

+0

是的,這是可能的。查看關於Ajax事件的jQuery文檔。 –

回答

1

查看jQuery中的Global AJAX Event Handlers。該網頁說:

這些方法註冊被稱爲處理程序時,某些事件,比如 如初始化或完成,對 頁面任何AJAX請求發生。如果jQuery.ajaxSetup()中的 全局屬性爲true,則默認爲,如果全局事件觸發每個AJAX請求。 注意:無論全局值如何,全局事件都不會因跨域腳本或JSONP 請求而被解僱。

所以,你的代碼應該只是這個樣子(我使用的隨機選擇,它沒有必要用「身體」):

$("body").ajaxComplete(function(e, xhr, settings){ alert(xhr.responseText); });​​​​​​​ 
+0

完美的作品。謝謝! – Nish

+0

太棒了!您可能想將其標記爲答案;-) – Ash

1

我看到你正在試圖創建全局處理程序它在響應上執行,只是之前成功事件。接下來,基於某些條件,打破默認行爲(通過在您的案例中顯示警報),或將流程進一步傳遞給自定義成功事件,因爲每個Ajax調用都可以有不同的邏輯以成功運行。

要做到這一點,你應該修改的jQuery提供一點ajax的處理程序:

var ns = {}; 
(function(ctx) { 
    ctx.ajax = function(options, callback){ 
     var defaults = { 
      success: function (data) { 
       if (data != "Catch me") { 
        callback(data); 
       } else { 
        alert("Catched"); 
       } 
      } 
     }; 
     $.extend(options, defaults); 
     $.ajax(options); 
    }; 
})(ns); 

Ajax調用應調用就像如下:

ns.ajax(options, function (data) { 
    alert("success, inside callback"); 
});