js url參數拼接方法

js url參數拼接方法

最多見的方式就是:數組

複製代碼 代碼以下:app

url?arg1=value1&arg2=value2&arg3=value3...ui


  這樣的方式最多見最普通也最容易理解,可是在項目中,若是後面帶的參數可變並且字段有不一樣的值或者不一樣的語義時,這樣的方式可維護性和可讀性其實並不高,並且代碼也容易重複或者冗餘。
  好比下面的一個對CGI的請求串:url

複製代碼 代碼以下:spa


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"
}對象


這是最多見的拼串邏輯了,這樣的代碼是沒有什麼問題,可是寫註釋很麻煩,並且可讀性也不高,字段說明也不明確,若是須要更換一個字段或在原來的基礎上更改邏輯都比較麻煩。
  我參看了一些同事關於這個問題的解決方案,第一種是將參數用對象的形式存起來,而後再寫一個方法在請求時將參數拼起來:string

複製代碼 代碼以下:io


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;
}function


這個方法是挺不錯的,優勢就是將全部參數一目瞭然的在對象中所有列出來,註釋也能夠針對字段更詳細,可讀性和維護性都獲得了提升;可是缺點就是代碼有點多,還須要專門加一個方法來組合參數。
  另外有一個方法是用數組的方法:基礎

複製代碼 代碼以下:


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("&");

這個方法可讀性可能比對象的方法差一些,可是維護性也比較高,代碼量也比較少。相對來講這個方法我還比較喜歡。 還有沒有好的拼接方法呢?

相關文章
相關標籤/搜索