добавить к URL и обновить страницу - PullRequest
113 голосов
/ 14 мая 2011

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

Ответы [ 8 ]

144 голосов
/ 14 мая 2011

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

var url = window.location.href;    
if (url.indexOf('?') > -1){
   url += '&param=1'
}else{
   url += '?param=1'
}
window.location.href = url;
123 голосов
/ 14 мая 2011

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

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

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

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

62 голосов
/ 15 января 2015

Большинство ответов здесь предполагают, что нужно добавить параметр (и) к 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-адреса в разных браузерах?

Это мой предложенный подход:

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');
2 голосов
/ 14 мая 2011
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;
}
2 голосов
/ 14 мая 2011
location.href = location.href + "&parameter=" + value;
0 голосов
/ 11 июня 2019

Попробуйте это

var url = ApiUrl(`/customers`);
  if(data){
   url += '?search='+data; 
  }
  else
  { 
      url +=  `?page=${page}&per_page=${perpage}`;
  }
  console.log(url);
0 голосов
/ 04 апреля 2019

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

Изменение:

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

Кому:

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

0 голосов
/ 12 ноября 2018

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

/*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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...