добавить в url и обновить страницу


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

5 96

5 ответов:

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

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

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

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

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

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

большинство ответов здесь предполагают, что следует добавить параметр(ы) к 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-адрес недействительным. Перейдите по этой ссылке для получения дополнительной информации о long 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');
location.href = location.href + "&parameter=" + 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;
}

больше совместимости версии

function gotoItem( item ){
    var url = window.location.href;    
    url += (url.indexOf('?') > -1)?"&":"?" + "item=" + encodeURIComponent(item);
    window.location.href = url;
}