Je cherche à écrire un morceau de javascript qui ajoutera un paramètre à l'URL actuelle, puis actualisera la page. Comment puis-je faire cela?
cela devrait fonctionner (non 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, faites de même, mais restez simple:
window.location.search += '¶m=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.
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 + "¶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.
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/?¶m=1¶m=1¶m=1¶m=1¶m=1¶m=1¶m=1¶m=1¶m=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');
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;
}
location.href = location.href + "¶meter=" + value;
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(/\?|&/);
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+'¶m='+value : _url+'?param='+value;
/*reload the page */
window.location.href = _url;
Essaye ça
var url = ApiUrl(`/customers`);
if(data){
url += '?search='+data;
}
else
{
url += `?page=${page}&per_page=${perpage}`;
}
console.log(url);