ajouter à l'url et actualiser la page
Je cherche à écrire un morceau de javascript qui ajoutera un paramètre à l'url actuelle, puis actualisera la page-Comment puis-je faire cela?
5 réponses
Cela devrait fonctionner (pas testé!)
var url = window.location.href;
if (url.indexOf('?') > -1){
url += '¶m=1'
}else{
url += '?param=1'
}
window.location.href = url;
Plus court que la réponse acceptée, en faisant la même chose, mais en gardant simple:
window.location.search += '¶m=42';
Nous n'avons pas à modifier l'url entière, juste la chaîne de requête, connue sous le nom d'attribut de recherche de location.
Lorsque vous attribuez une valeur à l'attribut de recherche, le point d'interrogation est automatiquement inséré par le navigateur et la page est rechargée.
La plupart des réponses ici suggèrent qu'il faut ajouter le(S) paramètre (s) à L'URL, quelque chose comme l'extrait suivant ou une variation similaire:
location.href = location.href + "¶meter=" + value;
Cela fonctionnera assez bien pour la majorité des cas.
Cependant
Ce n'est pas la bonne façon d'ajouter un paramètre à une URL à mon avis.
Parce que l'approche suggérée ne teste pas si le paramètre est déjà défini dans L'URL, sinon attention on peut se retrouver avec une URL très longue avec le même paramètre répété plusieurs fois. c'est à dire:
https://stackoverflow.com/?¶m=1¶m=1¶m=1¶m=1¶m=1¶m=1¶m=1¶m=1¶m=1
À ce stade, c'est là que les problèmes commencent. L'approche suggérée pourrait et créera une URL très longue après plusieurs actualisations de page, rendant ainsi l'URL invalide. Suivez ce lien pour plus d'informations sur long URL Quelle est la longueur maximale d'une URL dans différents navigateurs?
C'est mon approche suggérée:
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;
}
Avec cette fonction, il suffit de faire ce qui suit:
location.href = URL_add_parameter(location.href, 'param', '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;
}
Plus compat version
function gotoItem( item ){
var url = window.location.href;
url += (url.indexOf('?') > -1)?"&":"?" + "item=" + encodeURIComponent(item);
window.location.href = url;
}