附加到URL和刷新页面
我正在寻找写一段JavaScript将附加一个参数到当前的url,然后刷新页面 – 我怎么能做到这一点?
这应该工作(没testing!)
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,只是查询string,称为位置的search属性。
在为search属性分配值时,浏览器自动插入问号,重新载入页面。
这里的大多数答案都build议应该将参数附加到URL,如下面的片段或类似的变体:
location.href = location.href + "¶meter=" + value;
这在大多数情况下都能很好地工作。
然而
在我看来,这不是将一个参数附加到URL的正确方法。
由于build议的方法不testing参数是否已经在URL中设置,如果不小心,可能会结束一个非常长的URL重复多次相同的参数。 即:
https://stackoverflow.com/?¶m=1¶m=1¶m=1¶m=1¶m=1¶m=1¶m=1¶m=1¶m=1
在这一点上是问题开始的地方。 build议的方法可能并将在多个页面刷新后创build一个很长的URL,从而使URL无效。 点击这个链接了解更多关于long URL的信息不同浏览器中URL的最大长度是多less?
这是我build议的方法:
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; }
有了这个function,只需要做以下的事情:
location.href = URL_add_parameter(location.href, 'param', 'value');
function gotoItem( item ){ var url = window.location.href; var separator = (url.indexOf('?') > -1) ? "&" : "?"; var qs = "item=" + encodeURIComponent(item); window.location.href = url + separator + qs; }
更多compat版本
function gotoItem( item ){ var url = window.location.href; url += (url.indexOf('?') > -1)?"&":"?" + "item=" + encodeURIComponent(item); window.location.href = url; }
location.href = location.href + "¶meter=" + value;