2011-07-14 20 views
3

我有PHP編寫的後端和jQuery的一個前端..什麼我想要做的:.ajaxComplete禁止任何回調呼叫。可能嗎?

  1. 頁面包含AJAX幾個鏈接調用(每一個都有它自己的sucess /錯誤回調)
  2. PHP後端可能會返回類似如下的回覆:{「must_relogin」:true}
  3. 我必須綁定到jQuery中的某種全局AJAX事件才能捕獲此響應並執行一些邏輯操作並阻止任何其他回調

有可能嗎?

謝謝你的幫助。

更新

jQuery(document).ajaxComplete(function(a, b, c){ 
console.log(a, b, c); 
b.abort(); 
return false; }); 
+0

你的ajax調用是同步還是異步? – Rafay

+0

它們都是異步 –

回答

0

林不知道你的情況,但這裏是一個SO鏈接

Abort Ajax requests using jQuery

,解釋放棄使用ajax電話.abort但是如果呼叫是已經發送到服務器,然後.abort無法關閉現有的騙局nection到服務器,所有已經已經取得的Ajax調用的success回調將要被執行...

HTH

+0

我的代碼: jQuery的(文件).ajaxComplete(功能(A,B,C){ \t \t \t的console.log(A,B,C); \t \t \t b.abort() ; \t \t \t return false; \t \t}); 我不想關閉任何打開的連接或取消任何活動的請求 - 我只需要防止成功回調調用 –

+0

你**不能**取消在其「成功」回調中的ajax請求,如果你想取消它,你必須在它被啓動之前做它 – Rafay

+0

好..再次:)我不需要**取消**成功回調中的ajax請求 - 我明白這是不可能的。 我的解決方案是[http://pastebin.com/fDcTgqtd]但我不能張貼它作爲一個答案,因爲我的名譽:) –

1

您是否嘗試過使用event.stopImmediatePropagation()?它聲明「防止其他事件處理程序被調用」。從看jQuery的來源,我們看到這個

if (fireGlobals) { 
    globalEventContext.trigger("ajaxComplete", [ jqXHR, s]); 
    // Handle the global AJAX counter 
    if (!(--jQuery.active)) { 
     jQuery.event.trigger("ajaxStop"); 
    } 
} 

這裏是它的一個工作示例可能解決您的問題,http://jsfiddle.net/Akkuma/95zfj/

需要注意的是,它似乎如果ajaxCompletes不是所有綁定到不行相同的元素。

0

如果我正確理解問題,則不可能根據響應字符串阻止回調調用。問題是ajax全局事件處理程序(如ajaxSuccess和ajaxComplete)在執行回調後調用。