我在頁面中有十幾個ajax調用,所有調用都有不同的目的。我想知道我是否可以編寫一個可以捕獲頁面上的任何ajax調用響應的函數。如果響應是文本「Catch me」,該函數將阻止默認的ajax成功函數並提醒「Caught」;如果不是,則遵循默認成功功能。所有Ajax響應的共同處理程序
基本上,我可以編寫一個函數來捕獲頁面上的所有ajax調用並檢查它們的響應文本。
一個單調乏味的方法是編輯每個ajax調用,但我試圖避免這種情況。
我在頁面中有十幾個ajax調用,所有調用都有不同的目的。我想知道我是否可以編寫一個可以捕獲頁面上的任何ajax調用響應的函數。如果響應是文本「Catch me」,該函數將阻止默認的ajax成功函數並提醒「Caught」;如果不是,則遵循默認成功功能。所有Ajax響應的共同處理程序
基本上,我可以編寫一個函數來捕獲頁面上的所有ajax調用並檢查它們的響應文本。
一個單調乏味的方法是編輯每個ajax調用,但我試圖避免這種情況。
查看jQuery中的Global AJAX Event Handlers。該網頁說:
這些方法註冊被稱爲處理程序時,某些事件,比如 如初始化或完成,對 頁面任何AJAX請求發生。如果jQuery.ajaxSetup()中的 全局屬性爲true,則默認爲,如果全局事件觸發每個AJAX請求。 注意:無論全局值如何,全局事件都不會因跨域腳本或JSONP 請求而被解僱。
所以,你的代碼應該只是這個樣子(我使用的隨機選擇,它沒有必要用「身體」):
$("body").ajaxComplete(function(e, xhr, settings){ alert(xhr.responseText); });
我看到你正在試圖創建全局處理程序它在響應上執行,只是之前成功事件。接下來,基於某些條件,打破默認行爲(通過在您的案例中顯示警報),或將流程進一步傳遞給自定義成功事件,因爲每個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");
});
您可以創建一個處理程序回調,但這取決於你現有的結構。您幾乎肯定會需要重構現有的代碼以適應常見的處理程序。沒有看到特定的代碼,我們無法提供幫助。 –
是的,這是可能的。查看關於Ajax事件的jQuery文檔。 –