附加到网址并刷新页面

ama*_*eur 119 javascript jquery refresh

我期待写一段javascript,将一个参数附加到当前网址,然后刷新页面 - 我该怎么做?

Shl*_*emi 148

这应该工作(没有测试!)

var url = window.location.href;    
if (url.indexOf('?') > -1){
   url += '&param=1'
}else{
   url += '?param=1'
}
window.location.href = url;
Run Code Online (Sandbox Code Playgroud)

  • 一个跟进到这个,如何添加一些逻辑,如果参数已经存在于URL中我更新其值而不是添加新参数? (7认同)

Bo *_*sen 131

比接受的答案短,做同样的事,但保持简单:

window.location.search += '&param=42';
Run Code Online (Sandbox Code Playgroud)

我们不必更改整个URL,只需更改查询字符串,称为位置的搜索属性.

为搜索属性分配值时,浏览器会自动插入问号并重新加载页面.

  • 对于你知道这将是唯一参数的情况,你也可以设置搜索而不是追加它:`window.location.search ='?param = 42';` (10认同)

yey*_*eyo 65

这里的大多数答案都表明应该将参数附加到URL,类似于以下代码段或类似的变体:

location.href = location.href + "&parameter=" + value;
Run Code Online (Sandbox Code Playgroud)

对于大多数情况,这将非常有效.

然而

在我看来,这不是将参数附加到URL的正确方法.

因为建议的方法不测试参数是否已经在URL中设置,如果不小心,可能最终会有一个非常长的URL,同一个参数重复多次.即:

https://stackoverflow.com/?&param=1&param=1&param=1&param=1&param=1&param=1&param=1&param=1&param=1
Run Code Online (Sandbox Code Playgroud)

在这一点上是问题的开始.建议的方法可以并且将在多次页面刷新后创建一个非常长的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;
}
Run Code Online (Sandbox Code Playgroud)

使用此功能,您只需执行以下操作:

location.href = URL_add_parameter(location.href, 'param', 'value');
Run Code Online (Sandbox Code Playgroud)

  • @SébastienGarcia-Roméo 是的,这是一种有趣的方法,而且确实有效,但是,有两个原因可以解释为什么以这种方式对函数进行编程。1. 消除现有的重复参数。2. 覆盖现有参数的值。从这个角度来看,现在使用“indexOf”可能会给代码带来不必要的复杂性。 (2认同)

Pau*_*der 7

location.href = location.href + "&parameter=" + value;
Run Code Online (Sandbox Code Playgroud)

  • 参数重复 (6认同)

Kad*_*ade 7

如果您正在为现代浏览器开发,而不是自己解析 url 参数 -您可以使用内置URL函数为您执行此操作:

const parser = new URL(url || window.location);
parser.searchParams.set(key, value);
window.location = parser.href;
Run Code Online (Sandbox Code Playgroud)