Добавить на страницу URL и обновить страницу

Я хочу написать часть javascript, которая добавит параметр к текущему URL-адресу, а затем обновит страницу - как я могу это сделать?

Ответ 1

это должно работать (не проверено!)

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

Ответ 2

Короче принятого ответа, делая то же самое, но сохраняя его просто:

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

Нам не нужно изменять весь URL-адрес, просто строку запроса, известную как атрибут поиска местоположения.

Когда вы назначаете значение атрибуту поиска, знак вопроса автоматически вставляется браузером и страница перезагружается.

Ответ 3

В большинстве ответов здесь предлагается добавить параметр к URL-адресу, что-то вроде следующего фрагмента или аналогичного варианта:

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

Это будет хорошо работать для большинства случаев.

Однако

Это не правильный способ добавления параметра к URL-адресу, на мой взгляд.

Поскольку предлагаемый подход не проверяет, установлен ли параметр в 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-адрес недействительным. Следуйте этой ссылке для получения дополнительной информации о длинном 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');

Ответ 4

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

Ответ 5

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

Ответ 6

Пожалуйста, проверьте код ниже:

/*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;

Ответ 7

Одно небольшое исправление для @yeyo вдумчивого ответа выше.

Изменить:

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

Для того, чтобы:

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

Ответ 8

Попробуй это

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