我的脚本javascript是这样的:
<script>
var url = 'http://my-app.test/item';
var sessionBrand = 'honda';
var sessionModel = 'jazz';
var sessionCategory = 'velg';
var sessionKeyword = 'RS 175/60 R 15';
if(sessionBrand)
var brand = '?brand='+sessionBrand;
else
var brand = '';
if(sessionModel)
var model = '&model='+sessionModel;
else
var model = '';
if(sessionCategory)
var category = '&category='+sessionCategory;
else
var category = '';
if(sessionKeyword)
var keyword = '&keyword='+this.sessionKeyword;
else
var keyword = '';
var newUrl = url+brand+model+category+keyword;
console.log(newUrl);
</script>
console.log的结果如下:
http://my-app.test/item?brand=honda&model=jazz&category=velg&keyword=RS 175/60 R 15
var sessionBrand,sessionModel,sessionCategory和sessionKeyword是动态的。它可以改变。它可以为null或它可以有价值
我有个问题
例如这样的情况:
var sessionBrand = '';
var sessionModel = '';
var sessionCategory = '';
var sessionKeyword = 'RS 175/60 R 15';
网址是这样的:
http://my-app.test/item&keyword=RS 175/60 R 15
这个网址应该是这样的:
http://my-app.test/item?keyword=RS 175/60 R 15
我仍然感到很困惑
我怎么解决这个问题?
只需将数组用于参数,然后使用&
分隔符将它们连接起来。例如:
var url = 'http://my-app.test/item';
var sessionBrand = 'honda';
var sessionModel = 'jazz';
var sessionCategory = 'velg';
var sessionKeyword = 'RS 175/60 R 15';
var params = [];
if (sessionBrand) {
params.push('brand=' + sessionBrand);
}
if (sessionModel) {
params.push('model=' + sessionModel);
}
if(sessionCategory) {
params.push('category=' + sessionCategory);
}
if(sessionKeyword) {
params.push('category=' + sessionCategory);
}
var newUrl = url + '?' + params.join('&');
console.log(newUrl);
您的代码的问题在于它使用&
为所有查询参数添加前缀 - 除了sessionBrand
。您在URL中需要的是第一个参数以?
开头,其他所有参数都以&
开头。如您所见,当没有sessionBrand
时,您的代码不会执行此操作。
有很多方法可以解决这个问题。可能我能想到的最好的是按照你的方式组装各个部分,但没有任何前缀 - 然后在最后加入它们。像这样(我刚看到Viktor的解决方案,它的想法完全相同,但更整洁,因为他重写了更多的早期代码):
if(sessionBrand)
var brand = 'brand='+sessionBrand;
else
var brand = '';
if(sessionModel)
var model = 'model='+sessionModel;
else
var model = '';
if(sessionCategory)
var category = 'category='+sessionCategory;
else
var category = '';
if(sessionKeyword)
var keyword = 'keyword='+this.sessionKeyword;
else
var keyword = '';
var queryString = '?' + [sessionBrand, sessionModel, sessionCategory, sessionKeyword].filter(function(str) {
return str.length > 0;
}).join("&");
var newUrl = url+queryString;