2012-03-15 30 views
1

我有一個應用程序返回那裏有AJAX調用服務器的衆多數量。調用一個函數,每次和AJAX請求被處理,並從服務器

現在我要審讀來自服務器(此要求POP操作了Ajax代碼被解僱後)的響應。

所以我必須將審覈響應數據的功能,唯一的問題是我怎麼能得到的數據將被髮送到現在分開坐的功能。

我不想做添加一行代碼調用每個Ajax調用函數的艱苦工作。

是否有更簡單,出通用的方式。不知何故,我可以檢測到響應何時回來,然後處理響應。

同時使用傳統的JavaScript方法以及系統jquery Ajax調用。 (該應用程序已經越來越從一個較長時間的變化,並已轉手了很多,所以新事物得到補充,而舊的永遠不會被刪除)

+0

見http://api.jquery.com/extending-ajax/,http://api.jquery.com/ajaxComplete/和http://api.jquery.com/extending-ajax/ – Stefan 2012-03-15 12:07:21

+0

可能重複[jQuery的,註冊一個功能,每Ajax調用獨立(http://stackoverflow.com/questions/3901871/jquery-register-a-function-for-every-ajax-call-independently) – 2012-03-15 12:10:20

+0

我很同情你的代碼腐情況。作爲開發人員,我們太多次都必須使用其他開發人員的混亂代碼,但也忘記了我們是下一個開發人員。我鼓勵你,無論你忙不過來,清理這些代碼!我將花費更少的時間來修復代碼,然後用另一個不起眼的全面修復來維護這個混亂。 – natedavisolds 2012-03-15 12:15:26

回答

0

使用.ajaxComplete()應該足以趕上onComplete事件所做的所有AJAX請求通過jQuery。這不是你要求的嗎?

$('.ajaxRequest').click(function(event) { 
    event.preventDefault(); 
    $.getJSON(
     '/echo/json/', 
     this.id, 
     function(data, textStatus, jqXHR) { 
      console.log(data, textStatus, jqXHR); 
     } 
    ); 
}); 

// Listen to all ajax requests 
$("#log").ajaxComplete(function(event, request, settings) { 
    console.log(event, request, settings); 
});​ 

查看demo

+0

使用調用ajax的傳統'javascript'方式來完成這項工作。 – 2012-03-15 12:49:03

+0

不,'XMLHttpRequest'不會觸發任何我知道的事件。 – Stefan 2012-03-15 13:43:35

1

與助手功能包裝你Ajax調用,並用它在你的代碼。

的(未經測試)例如:

MyApp = MyApp || { 
    logRequest: function _logRequest(settings, response) { 
     // Log your response 
    }, 

    ajax: function _ajax (settings) { 
     var that = this; 

     // Log attempt request here?  

     // Example of logging the success callback (do similar for error or complete) 
     if (settings.success) { 
      // A success handler is already specified 
      settings.success = function (data) { 
       that.logRequest(settings, data); // Log the response 
       settings.success(data); // Call the original complete handler     
      }; 
     } else { 
      // No success handler is specified 
      settings.success = function (data) { 
       that.logRequest(settings, data); 
      }; 
     } 

     return jQuery.ajax(settings); 
    } 
}; 

我贊成這個機制,我想,以減少樣板地段的情況。我只需修改自己的MyApp對象的狀態(爲應用程序正確命名),因此它是一種接口,可以在不修改其他全局對象的情況下攔截函數調用。您還可以非常輕鬆地將此功能與其他功能互換,而無需隨時更新您的參考,這在許多其他情況下也可能有用。