2012-07-01 84 views
0

我的網頁在使用時需要發送/接收幾個ajax操作。目前我使用一個ajax處理程序來處理所有事件。所有ajax請求都使用這種格式發送/接收「(type)| {json string}」。一個ajax處理程序或多個處理程序?

一段js代碼將處理ajax請求/響應:分析響應文本 - >獲取類型 - > select ... case在每種類型的情況下做某事。

這可行,但隨着ajax事件的增長,有太多的情況下從0到99.好吧,它不可能是一個容易維護或進一步發展的工作。

也許我需要將單個ajax處理程序拆分爲多個?那麼瀏覽器如何知道哪個Ajax響應應該發送到特定的處理程序?

任何建議表示讚賞。

目前的代碼如下:(使用簡單的JavaScript的網頁之一,沒有使用的架構)

xmlhttp.onreadystatechange = function() { 
       if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { 
        //alert(xmlhttp.responseText); 
        var reply = decodeArray(xmlhttp.responseText); //convert to json object and some other stuff 
        switch (reply.type) { 
          case 0: 
          case 1: 
          .... 

        } 
+0

分享您當前的代碼 – Rab

回答

0

這是軟件工程的基本挑戰之一。你有一個重複的任務,但是細節會隨着每個變化而略有變化,所以你如何重複使用代碼並保持清潔......每一個實質性的應用程序都有這個問題。

您需要使用強制執行的設計方法分離問題。我通常爲我的應用程序開發API,它與應用程序的其他部分完全分離。我的API只做一件事,只做一件事 - 它與服務器通信。

它沒有專用代碼

這意味着如果需要,我可以在不同的應用程序中重複使用我的api。這也意味着我可以獨立於應用測試我的API。

因此,讓我們說你需要做一些像loadObject。該應用程序看到

App.API = { 
    loadObject: function(params, onSuccess, onFail) {...} 
} 

來保持這種解耦的關鍵是onSuccessonFail回調。使用API​​的應用程序通過這些函數;所以API對應用程序特定的邏輯一無所知 - 它只知道如果適當地觸發這些回調。回調函數是採用響應數據的參數的方法;所有的API都會將響應數據傳遞給回調函數。

由於大部分時間,你的ajax調用的細節都有很多常見的項目,我也會創建一些XhrWrapper來觸發請求。因此,在您loadObjects你會用你的XHR助手發出請求

xhr.sendRequest(url, method, onSuccess, onFail); 

這種方式發射XHR時的所有乏味最小化。

顯然,你可以走得更遠;例如,大部分時間失敗都是不好的,所以我的xhr包裝器會有一個默認的onFail實現,並且只有在合理的情況下,特定的API方法才能通過重寫。