Я хочу написати фрагмент javascript, який додасть параметр до поточної URL-адреси, а потім оновить сторінку - як це зробити?
Я хочу написати фрагмент javascript, який додасть параметр до поточної URL-адреси, а потім оновить сторінку - як це зробити?
Відповіді:
це має працювати (не перевірено!)
var url = window.location.href;
if (url.indexOf('?') > -1){
url += '¶m=1'
}else{
url += '?param=1'
}
window.location.href = url;
Коротше, ніж прийнята відповідь, те саме, але просто:
window.location.search += '¶m=42';
Нам не потрібно змінювати всю URL-адресу, лише рядок запиту, відомий як атрибут пошуку місцезнаходження.
Коли ви присвоюєте значення атрибуту пошуку, веб-переглядач автоматично вставляє запитальний знак і сторінка перезавантажується.
window.location.search = '?param=42';
Більшість відповідей тут припускають, що слід додати параметр (и) до URL-адреси, наприклад, такий фрагмент або подібний варіант:
location.href = location.href + "¶meter=" + value;
Це буде спрацювати досить добре для більшості випадків.
Однак
На мою думку, це не правильний спосіб додавання параметра до URL-адреси.
Оскільки запропонований підхід не перевіряє, чи параметр уже встановлено в URL-адресі, якщо це не обережно, може виявитися дуже довгою URL-адресою з тим самим параметром, повтореним кілька разів. тобто:
https://stackoverflow.com/?¶m=1¶m=1¶m=1¶m=1¶m=1¶m=1¶m=1¶m=1¶m=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');
if(window.location.search.indexOf('¶m=') == -1) {window.location.search += '¶m=1';}
indexOf
може ввести непотрібну складність коду.
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;
}
Перевірте наведений нижче код:
/*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+'¶m='+value : _url+'?param='+value;
/*reload the page */
window.location.href = _url;
Одне невелике виправлення помилок для продуманої відповіді @ yeyo вище.
Змінити:
var parameters = parser.search.split(/\?|&/);
До:
var parameters = parser.search.split(/\?|&/);
Спробуйте це
var url = ApiUrl(`/customers`);
if(data){
url += '?search='+data;
}
else
{
url += `?page=${page}&per_page=${perpage}`;
}
console.log(url);