2011-07-21 51 views
1

我有這個帖子的方法避免硬編碼解決方案POST方法

$.post("/abc/export.action", 
       { 
       sessiontoken: sessiontoken, 
       exportType: "xls", 
       param1:compareData, 
       param2:comparePatchData}, 
        function(resdata) 
        { 
         alert(resdata); 
        } 
      ); 

我想一些最佳實踐,使我能有枚舉或陣列存儲在我的一切職務參數,雖然後使用它,這是一種其中我可以避免sessiontokenparam1等硬編碼。可能的解決方案是什麼?

編輯

有時可能會發生,我需要改變的params的名字,所以我不得不修改我到處有post方法,而不是說,如果所有的PARAMS那裏有一些枚舉或數組它在一個地方更換會容易得多。

+0

如果您有一個包含要發送的所有數據的對象,爲什麼不將該對象用作'$ .post()'的第二個參數? '$。員額( '/ ABC/export.action',dataobj,功能(resdata){警報(resdata);});'我怕我不完全理解什麼是你的問題。 – duri

+0

@duri:我編輯我的問題解釋得 – abi1964

+0

@Abhishek - 如果你想在'$。員額的全部(或大部分)情況下使用相同的參數()'只是做杜裏說,還是看我的答案。 – nnnnnn

回答

1

如果你想在一個對象標籤是基於其他一些變量,你可以用

var paramLabels = {"session": "sessionToken", "type": "exportType", ...} 
    var paramValues = {}; 
    paramValues[paramLabels.session] = sessionToken; 
    paramValues[paramLabels.type] = "xls" 
    ... 

    $.post(/"abc/export.action", paramValues, function(resdata) { alert(resdata);}); 

做,我實在看不出這種做法的好處期望當後端像開發商每五分鐘更改參數的名稱。

處理這將是創建一個工廠方法或生成器

function createParams(session, type, ...) { 
    return { "sessionToken": session, "exportType": type, ...) } 
    } 

    var params = createParams(sessionToken, "xls", ...); 

var Parameters = function() { 
     this.session = function(session) { this.session = session; return this;} 
     this.type = function(type) { this.type = type; return this;} 
     ... 
     this.build = function() {  
      var params = {} 
      !this.session || params.sessionToken = this.session; 
      !this.type || params.exportType = this.type; 
      ... 
      return params; 

     } 
    } 

    var params = new Parameters().session(sessionToken).type("xls")...build(); 

這兩種方法讓你定義的參數concreate名只有一次的另一種方式。當需要不同的參數集時,後者可能更容易重用。

1

不是傳遞對象文本$.post()可以傳遞在你的代碼的其他地方定義的對象,從而重複使用同一對象的多個職位。或者放入一個函數調用,返回一個設置了適當參數的對象。

var postParams = { 
    sessiontoken: sessiontoken, 
    exportType: "xls", 
    param1:compareData, 
    param2:comparePatchData 
}; 

$.post("/abc/export.action", 
     postParams, 
     function(resdata) { alert(resdata); }); 

$.post("/abc/import.action", 
     postParams, 
     function(resdata) { alert(resdata); }); 

// or use a function that can return a different object 
// depending on some conditions (or parameters passed to 
// the function though I haven't shown that) 
function getPostParams() { 
    if (someCondition) 
    return postParams; 
    else 
    return { 
     sessionToken : something, 
     // etc. 
    }; 
} 

$.post("/abc/someother.action", 
     getPostParams(), 
     function(resdata) { alert(resdata); });