188 votes

Ajouter à l'URL et rafraîchir la page

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 ?

0 votes

La solution la plus optimisée que j'ai trouvée : stackoverflow.com/a/38792165/1783439

213voto

Shlomi Komemi Points 1941

Ceci devrait fonctionner (non testé !)

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

1 votes

Str.search( regex ) est plus rapide que srt.indexOf( str2 )

1 votes

Et vous devriez donner un exemple complet avec un nom de variable et un paramètre de variable avec encodeURIComponent().

0 votes

Et au lieu de > -1, vous devez utiliser !== -1.

185voto

Bo Frederiksen Points 345

Plus court que la réponse acceptée, en faisant la même chose, mais en restant simple :

window.location.search += '&param=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.

19 votes

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';

0 votes

Et si votre url est : www.mysite.com ... alors ne va-t-il pas faire l'url : www.mysite.com&param=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.

1 votes

@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.

91voto

yeyo Points 1936

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 + "&parameter=" + 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/?&param=1&param=1&param=1&param=1&param=1&param=1&param=1&param=1&param=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');

1 votes

Pourquoi ne pas simplement utiliser : if(window.location.search.indexOf('&param=') == -1) {window.location.search += '&param=1';}

2 votes

@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.

1 votes

C'est la meilleure réponse, elle fonctionne sans modification

30voto

Kade Points 461

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;

1 votes

Je pense que c'est la méthode la plus propre car si vous avez déjà des paramètres dans l'url, avec les autres, vous les répéteriez.

7voto

Paul Alexander Points 17611
location.href = location.href + "&parameter=" + value;

6 votes

Paramètres dupliqués

Prograide.com

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.

Powered by:

X