Réponses:
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, faire de même, mais en restant 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.
window.location.search = '?param=42';
La plupart des réponses ici suggèrent qu'il faut ajouter le (s) paramètre (s) à l'URL, quelque chose comme l'extrait de code suivant ou une variante similaire:
location.href = location.href + "¶meter=" + value;
Cela fonctionnera assez bien pour la majorité des cas.
toutefois
Ce n'est pas la bonne façon d'ajouter un paramètre à une URL à mon avis.
Étant donné que l'approche suggérée ne teste pas si le paramètre est déjà défini dans l'URL, si ce n'est pas prudent, 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
c'est à ce stade que les problèmes commencent. L'approche suggérée pourrait créer 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 les URL longues. Quelle est la longueur maximale d'une URL dans différents navigateurs?
Voici 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');
if(window.location.search.indexOf('¶m=') == -1) {window.location.search += '¶m=1';}
indexOf
pourrait introduire une complexité inutile au code.
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 de compatibilité
function gotoItem( item ){
var url = window.location.href;
url += (url.indexOf('?') > -1)?"&":"?" + "item=" + encodeURIComponent(item);
window.location.href = url;
}
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;
Une petite correction de bogue pour la réponse réfléchie de @ yeyo ci-dessus.
Changement:
var parameters = parser.search.split(/\?|&/);
À:
var parameters = parser.search.split(/\?|&/);
Essaye ça
var url = ApiUrl(`/customers`);
if(data){
url += '?search='+data;
}
else
{
url += `?page=${page}&per_page=${perpage}`;
}
console.log(url);