Answers:
这应该工作(未经测试!)
var url = window.location.href;
if (url.indexOf('?') > -1){
url += '¶m=1'
}else{
url += '?param=1'
}
window.location.href = url;
这样做比接受的答案短,但要保持简单:
window.location.search += '¶m=42';
我们不必更改整个URL,只需更改查询字符串(即位置的搜索属性)即可。
当您为搜索属性分配值时,浏览器会自动插入问号并重新加载页面。
window.location.search = '?param=42';
此处的大多数答案都建议将参数附加到URL,例如以下代码段或类似的变体:
location.href = location.href + "¶meter=" + value;
在大多数情况下,这将非常有效。
然而
我认为这不是将参数附加到URL的正确方法。
由于建议的方法不会测试URL中是否已经设置了参数,因此如果不小心,可能会得到一个很长的URL,并且该参数重复多次。即:
https://stackoverflow.com/?¶m=1¶m=1¶m=1¶m=1¶m=1¶m=1¶m=1¶m=1¶m=1
这是问题开始的地方。建议的方法可能并且将在刷新多个页面后创建一个非常长的URL,从而使URL无效。单击此链接以获取有关长URL的更多信息。不同浏览器中URL的最大长度是多少?
这是我建议的方法:
function URL_add_parameter(url, param, value){
var hash = {};
var parser = document.createElement('a');
parser.href = url;
var parameters = parser.search.split(/\?|&/);
for(var i=0; i < parameters.length; i++) {
if(!parameters[i])
continue;
var ary = parameters[i].split('=');
hash[ary[0]] = ary[1];
}
hash[param] = value;
var list = [];
Object.keys(hash).forEach(function (key) {
list.push(key + '=' + hash[key]);
});
parser.search = '?' + list.join('&');
return parser.href;
}
使用此功能,只需执行以下操作:
location.href = URL_add_parameter(location.href, 'param', 'value');
if(window.location.search.indexOf('¶m=') == -1) {window.location.search += '¶m=1';}
indexOf
可能会给代码带来不必要的复杂性。
function gotoItem( item ){
var url = window.location.href;
var separator = (url.indexOf('?') > -1) ? "&" : "?";
var qs = "item=" + encodeURIComponent(item);
window.location.href = url + separator + qs;
}
更多兼容版本
function gotoItem( item ){
var url = window.location.href;
url += (url.indexOf('?') > -1)?"&":"?" + "item=" + encodeURIComponent(item);
window.location.href = url;
}
试试这个
var url = ApiUrl(`/customers`);
if(data){
url += '?search='+data;
}
else
{
url += `?page=${page}&per_page=${perpage}`;
}
console.log(url);