js URL參數(shù)的拼接方法比較
更新時間:2012年02月15日 18:39:03 作者:
請求的URL后面帶參數(shù)在項目中是很常見的,常用在的地方比如跳轉到新頁面或者請求CGI等
最常見的方式就是:
這樣的方式最常見最普通也最容易理解,但是在項目中,如果后面帶的參數(shù)可變而且字段有不同的值或者不同的語義時,這樣的方式可維護性和可讀性其實并不高,而且代碼也容易重復或者冗余。
比如下面的一個對CGI的請求串:
var url = "http://www.tenpay.com/app/v1.0/juhui.cgi?";
var queryString = "method=2&page=index";
if(content a){ //訪問的首頁的區(qū)域A,需要加參數(shù)subpage
queryString += "&subpage=a";
}else if(content b){//如果訪問了區(qū)域B,則參數(shù)subpage要變?yōu)閎
queryString += "&subpage=b";
}
if(spec_method){
//如果查看的時候要按照指定的篩選方法,則還需要加參數(shù)spec_method
queryString += "&spec_method=1"
}
這是最常見的拼串邏輯了,這樣的代碼是沒有什么問題,但是寫注釋很麻煩,而且可讀性也不高,字段說明也不明確,如果需要更換一個字段或在原來的基礎上更改邏輯都比較麻煩。
我參看了一些同事關于這個問題的解決方案,第一種是將參數(shù)用對象的形式存起來,然后再寫一個方法在請求時將參數(shù)拼起來:
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;
}
這個方法是挺不錯的,優(yōu)點就是將所有參數(shù)一目了然的在對象中全部列出來,注釋也可以針對字段更詳細,可讀性和維護性都得到了提高;但是缺點就是代碼有點多,還需要專門加一個方法來組合參數(shù)。
另外有一個方法是用數(shù)組的方法:
var queryString = [
"method=2", //method字段的注釋
"page=index"
];
if(content a){ //訪問的首頁的區(qū)域A,需要加參數(shù)subpage
queryString.concat([
"subpage=a", //subpage注釋
]);
}else if(content b){//如果訪問了區(qū)域B,則參數(shù)subpage要變?yōu)閎
queryString.concat([
"subpage=b", //subpage注釋
]);
}
if(spec_method){
//如果查看的時候要按照指定的篩選方法,則還需要加參數(shù) queryString.concat([
"spec_method=2", //spec_method注釋
]);
}
queryString = queryString.join("&");
這個方法可讀性可能比對象的方法差一些,但是維護性也比較高,代碼量也比較少。相對來說這個方法我還比較喜歡。
恩恩,要不是昨天的代碼評審,這樣小的地方的代碼優(yōu)化我是要工作很久之后才能發(fā)現(xiàn)的。看來代碼評審對自身能力提高是加速劑吖,哈哈。
這兩個方法是我暫時發(fā)現(xiàn)的,要是后續(xù)再發(fā)現(xiàn)什么好方法,再補充進來~
復制代碼 代碼如下:
url?arg1=value1&arg2=value2&arg3=value3...
這樣的方式最常見最普通也最容易理解,但是在項目中,如果后面帶的參數(shù)可變而且字段有不同的值或者不同的語義時,這樣的方式可維護性和可讀性其實并不高,而且代碼也容易重復或者冗余。
比如下面的一個對CGI的請求串:
復制代碼 代碼如下:
var url = "http://www.tenpay.com/app/v1.0/juhui.cgi?";
var queryString = "method=2&page=index";
if(content a){ //訪問的首頁的區(qū)域A,需要加參數(shù)subpage
queryString += "&subpage=a";
}else if(content b){//如果訪問了區(qū)域B,則參數(shù)subpage要變?yōu)閎
queryString += "&subpage=b";
}
if(spec_method){
//如果查看的時候要按照指定的篩選方法,則還需要加參數(shù)spec_method
queryString += "&spec_method=1"
}
這是最常見的拼串邏輯了,這樣的代碼是沒有什么問題,但是寫注釋很麻煩,而且可讀性也不高,字段說明也不明確,如果需要更換一個字段或在原來的基礎上更改邏輯都比較麻煩。
我參看了一些同事關于這個問題的解決方案,第一種是將參數(shù)用對象的形式存起來,然后再寫一個方法在請求時將參數(shù)拼起來:
復制代碼 代碼如下:
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;
}
這個方法是挺不錯的,優(yōu)點就是將所有參數(shù)一目了然的在對象中全部列出來,注釋也可以針對字段更詳細,可讀性和維護性都得到了提高;但是缺點就是代碼有點多,還需要專門加一個方法來組合參數(shù)。
另外有一個方法是用數(shù)組的方法:
復制代碼 代碼如下:
var queryString = [
"method=2", //method字段的注釋
"page=index"
];
if(content a){ //訪問的首頁的區(qū)域A,需要加參數(shù)subpage
queryString.concat([
"subpage=a", //subpage注釋
]);
}else if(content b){//如果訪問了區(qū)域B,則參數(shù)subpage要變?yōu)閎
queryString.concat([
"subpage=b", //subpage注釋
]);
}
if(spec_method){
//如果查看的時候要按照指定的篩選方法,則還需要加參數(shù) queryString.concat([
"spec_method=2", //spec_method注釋
]);
}
queryString = queryString.join("&");
這個方法可讀性可能比對象的方法差一些,但是維護性也比較高,代碼量也比較少。相對來說這個方法我還比較喜歡。
恩恩,要不是昨天的代碼評審,這樣小的地方的代碼優(yōu)化我是要工作很久之后才能發(fā)現(xiàn)的。看來代碼評審對自身能力提高是加速劑吖,哈哈。
這兩個方法是我暫時發(fā)現(xiàn)的,要是后續(xù)再發(fā)現(xiàn)什么好方法,再補充進來~
相關文章
小程序使用watch監(jiān)聽數(shù)據(jù)變化的方法詳解
這篇文章主要介紹了小程序使用watch監(jiān)聽數(shù)據(jù)變化的方法詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2019-09-09JS如何遍歷帶有子集的數(shù)組集合(嵌套數(shù)組)
這篇文章主要介紹了JS如何遍歷帶有子集的數(shù)組集合(嵌套數(shù)組)問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-06-06