附加到网址并刷新页面

时间:2011-05-13 20:33:36

标签: javascript jquery refresh

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

11 个答案:

答案 0 :(得分:142)

这应该有效(未经过测试!)

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

答案 1 :(得分:118)

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

window.location.search += '&param=42';

我们不必更改整个网址,只需更改位置的搜索属性查询字符串。

当您为搜索属性指定值时,浏览器会自动插入问号并重新加载页面。

答案 2 :(得分:61)

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

location.href = location.href + "&parameter=" + value;

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

<强>然而

在我看来,这不是将参数附加到网址的正确方法。

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

https://stackoverflow.com/?&param=1&param=1&param=1&param=1&param=1&param=1&param=1&param=1&param=1

此时问题就出现了。建议的方法可以并且将在多次页面刷新后创建一个非常长的URL,从而使URL无效。有关长网址What is the maximum length of a URL in different browsers?

的详细信息,请点击此链接

这是我建议的方法:

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');

答案 3 :(得分:2)

location.href = location.href + "&parameter=" + value;

答案 4 :(得分:2)

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;
}

答案 5 :(得分:0)

请检查以下代码:

/*Get current URL*/    
var _url = location.href; 
/*Check if the url already contains ?, if yes append the parameter, else add the parameter*/
_url = ( _url.indexOf('?') !== -1 ) ? _url+'&param='+value : _url+'?param='+value;
/*reload the page */
window.location.href = _url;

答案 6 :(得分:0)

针对@yeyo的周到答案的一个小错误修复。

更改:

var parameters = parser.search.split(/\?|&/);

收件人:

var parameters = parser.search.split(/\?|&amp;/);

答案 7 :(得分:0)

尝试一下

var url = ApiUrl(`/customers`);
  if(data){
   url += '?search='+data; 
  }
  else
  { 
      url +=  `?page=${page}&per_page=${perpage}`;
  }
  console.log(url);

答案 8 :(得分:0)

也:

window.location.href += (window.location.href.indexOf('?') > -1 ? '&' : '?') + 'param=1'

只有一个Shlomi班轮可以在小书签中使用

答案 9 :(得分:0)

这行JS代码采用不带参数的链接(即'?'之前的链接),然后将参数附加到该链接。

window.location.href = (window.location.href.split('?')[0]) + "?p1=ABC&p2=XYZ";

上面的代码行将两个参数p1p2分别附加值'ABC''XYZ'(为了更好地理解)。

答案 10 :(得分:0)

If you are developing for a modern browser,而不是自己解析url参数-you can use the built in URL functions to do it for you像这样:

const parser = new URL(url || window.location);
parser.searchParams.set(key, value);
window.location = parser.href;