DIV CSS 佈局教程網

 DIV+CSS佈局教程網 >> 網頁腳本 >> JavaScript入門知識 >> 關於JavaScript >> js URL參數的拼接方法比較
js URL參數的拼接方法比較
編輯:關於JavaScript     
最常見的方式就是:
復制代碼 代碼如下:url?arg1=value1&arg2=value2&arg3=value3...
  這樣的方式最常見最普通也最容易理解,但是在項目中,如果後面帶的參數可變而且字段有不同的值或者不同的語義時,這樣的方式可維護性和可讀性其實並不高,而且代碼也容易重復或者冗余。
  比如下面的一個對CGI的請求串:
復制代碼 代碼如下:
var url = "http://www.tenpay.com/app/v1.0/juhui.cgi?";
var queryString = "method=2&page=index";
if(content a){ //訪問的首頁的區域A,需要加參數subpage
  queryString += "&subpage=a";
}else if(content b){//如果訪問了區域B,則參數subpage要變為b
  queryString += "&subpage=b";
}
if(spec_method){
  //如果查看的時候要按照指定的篩選方法,則還需要加參數spec_method
queryString += "&spec_method=1"
}

這是最常見的拼串邏輯了,這樣的代碼是沒有什麼問題,但是寫注釋很麻煩,而且可讀性也不高,字段說明也不明確,如果需要更換一個字段或在原來的基礎上更改邏輯都比較麻煩。
  我參看了一些同事關於這個問題的解決方案,第一種是將參數用對象的形式存起來,然後再寫一個方法在請求時將參數拼起來:
復制代碼 代碼如下:
var queryConfig={
"page" : "index",
"method" : 2, //1:按照方法A查看 2:按照方法B查看
"subpage" : -1, //-1:此條件不傳遞 a:查看contentA b:查看contentB
"spec_method" :-1 //-1:此條件不傳遞 1:按照銷量高低查 2:按照時間查
};
var setQueryConfig = function(){
var _str = "";
for(var o in queryConfig){
if(queryConfig[o] != -1){
_str += o + "=" + queryConfig[o] + "&";
}
}
var _str = _str.substring(0, str.length-1);
return _str;
}

這個方法是挺不錯的,優點就是將所有參數一目了然的在對象中全部列出來,注釋也可以針對字段更詳細,可讀性和維護性都得到了提高;但是缺點就是代碼有點多,還需要專門加一個方法來組合參數。
  另外有一個方法是用數組的方法:
復制代碼 代碼如下:
var queryString = [
"method=2", //method字段的注釋
"page=index"
];
if(content a){ //訪問的首頁的區域A,需要加參數subpage
  queryString.concat([
"subpage=a", //subpage注釋
]);
}else if(content b){//如果訪問了區域B,則參數subpage要變為b
  queryString.concat([
"subpage=b", //subpage注釋
]);
}
if(spec_method){
  //如果查看的時候要按照指定的篩選方法,則還需要加參數 queryString.concat([
"spec_method=2", //spec_method注釋
]);
}
queryString = queryString.join("&");

這個方法可讀性可能比對象的方法差一些,但是維護性也比較高,代碼量也比較少。相對來說這個方法我還比較喜歡。
恩恩,要不是昨天的代碼評審,這樣小的地方的代碼優化我是要工作很久之後才能發現的。看來代碼評審對自身能力提高是加速劑吖,哈哈。
這兩個方法是我暫時發現的,要是後續再發現什麼好方法,再補充進來~
XML學習教程| jQuery入門知識| AJAX入門| Dreamweaver教程| Fireworks入門知識| SEO技巧| SEO優化集錦|
Copyright © DIV+CSS佈局教程網 All Rights Reserved