web-dev-qa-db-fra.com

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?

115
amateur

cela devrait fonctionner (non testé!)

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

Plus court que la réponse acceptée, faites de même, mais restez simple:

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

Il n'est pas nécessaire de modifier l'URL complète, mais uniquement la chaîne de requête, appelée attribut de recherche de localisation.

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.

125
Bo Frederiksen

La plupart des réponses suggèrent d'ajouter les paramètres à l'URL, comme l'extrait suivant ou une variante similaire:

location.href = location.href + "&parameter=" + 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.

Comme l'approche suggérée ne vérifie pas si le paramètre est déjà défini dans l'URL, vous pouvez vous retrouver avec une URL très longue avec le même paramètre répété plusieurs fois. c'est à dire:

https://stackoverflow.com/?&param=1&param=1&param=1&param=1&param=1&param=1&param=1&param=1&param=1

c'est à ce stade que les problèmes commencent. L'approche suggérée pourrait créer une URL très longue après l'actualisation de plusieurs pages, rendant l'URL invalide. Suivez ce lien pour plus d'informations sur l'URL longue Quelle est la longueur maximale d'une URL dans différents navigateurs?

Ceci 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');
62
yeyo
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 de version compat

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

Un petit correctif pour la réponse réfléchie de @ yeyo ci-dessus.

Changement:

var parameters = parser.search.split(/\?|&/);

À:

var parameters = parser.search.split(/\?|&amp;/);

0
Gabrien

Veuillez vérifier le code ci-dessous:

/*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+'&param='+value : _url+'?param='+value;
/*reload the page */
window.location.href = _url;
0
Aftab

Essaye ça

var url = ApiUrl(`/customers`);
  if(data){
   url += '?search='+data; 
  }
  else
  { 
      url +=  `?page=${page}&per_page=${perpage}`;
  }
  console.log(url);