Je cherche à écrire un morceau de javascript qui ajoutera un paramètre à l'URL actuelle et rafraîchira ensuite la page - comment puis-je faire cela ?
Str.search( regex ) est plus rapide que srt.indexOf( str2 )
Je cherche à écrire un morceau de javascript qui ajoutera un paramètre à l'URL actuelle et rafraîchira ensuite la page - comment puis-je faire cela ?
Et vous devriez donner un exemple complet avec un nom de variable et un paramètre de variable avec encodeURIComponent().
Plus court que la réponse acceptée, en faisant la même chose, mais en restant simple :
window.location.search += '¶m=42';
Il n'est pas nécessaire de modifier toute l'url, mais seulement la chaîne de requête, connue sous le nom d'attribut de recherche de l'emplacement.
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.
Pour un cas où vous savez que ce sera le seul paramètre, vous pouvez également définir la recherche au lieu de l'ajouter : window.location.search = '?param=42';
Et si votre url est : www.mysite.com ... alors ne va-t-il pas faire l'url : www.mysite.com¶m=42 qui aurait besoin du caractère " ?" puisque c'est le seul paramètre dans l'url. J'aime la réponse de @Shlomi Komemi car elle couvre ces deux scénarios principaux.
@greaterKing le navigateur ajoute le point d'interrogation, lors de l'ajout de paramètres à l'attribut de recherche de l'emplacement. Essayez-le dans la console de votre navigateur.
La plupart des réponses suggèrent d'ajouter le(s) paramètre(s) à l'URL, comme dans l'extrait suivant ou une variante similaire :
location.href = location.href + "¶meter=" + value;
Cela fonctionnera très bien dans la majorité des cas.
Cependant
À mon avis, ce n'est pas la bonne façon d'ajouter un paramètre à une URL.
Comme l'approche proposée ne vérifie pas si le paramètre est déjà défini dans l'URL, si l'on ne fait pas attention, on peut se retrouver avec une URL très longue avec le même paramètre répété plusieurs fois, par exemple :
https://stackoverflow.com/?¶m=1¶m=1¶m=1¶m=1¶m=1¶m=1¶m=1¶m=1¶m=1
C'est à ce moment-là que les problèmes commencent. L'approche suggérée pourrait créer et créera une URL très longue après plusieurs rafraîchissements de la page, rendant ainsi l'URL invalide. Suivez ce lien pour plus d'informations sur les URL longues Quelle est la longueur maximale d'une URL dans les différents navigateurs ?
Voici l'approche que je propose :
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');
Pourquoi ne pas simplement utiliser : if(window.location.search.indexOf('¶m=') == -1) {window.location.search += '¶m=1';}
@SébastienGarcia-Roméo Oui, c'est une approche intéressante, et en effet valide, cependant, il y a deux raisons pour lesquelles la fonction est programmée de cette façon. 1. Pour éliminer les paramètres existants en double. 2. Pour écraser la valeur d'un paramètre existant. De ce point de vue, maintenant l'utilisation de indexOf
pourrait introduire une complexité inutile dans le code.
Si vous développez pour un navigateur moderne Au lieu d'analyser les paramètres de l'url vous-même vous pouvez utiliser la fonction intégrée URL
des fonctions pour le faire à votre place comme ça :
const parser = new URL(url || window.location);
parser.searchParams.set(key, value);
window.location = parser.href;
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
0 votes
La solution la plus optimisée que j'ai trouvée : stackoverflow.com/a/38792165/1783439