Antworten:
das sollte funktionieren (nicht getestet!)
var url = window.location.href;
if (url.indexOf('?') > -1){
url += '¶m=1'
}else{
url += '?param=1'
}
window.location.href = url;
Kürzer als die akzeptierte Antwort, das Gleiche tun, aber einfach halten:
window.location.search += '¶m=42';
Wir müssen nicht die gesamte URL ändern, sondern nur die Abfragezeichenfolge, die als Suchattribut des Standorts bezeichnet wird.
Wenn Sie dem Suchattribut einen Wert zuweisen, wird das Fragezeichen automatisch vom Browser eingefügt und die Seite neu geladen.
window.location.search = '?param=42';
Die meisten Antworten hier schlagen vor, dass man die Parameter an die URL anhängen sollte, etwa das folgende Snippet oder eine ähnliche Variante:
location.href = location.href + "¶meter=" + value;
Dies wird in den meisten Fällen recht gut funktionieren.
jedoch
Das ist meiner Meinung nach nicht der richtige Weg, einen Parameter an eine URL anzuhängen.
Da der vorgeschlagene Ansatz nicht testet, ob der Parameter bereits in der URL festgelegt ist, kann es bei Nichtbeachtung zu einer sehr langen URL kommen, bei der derselbe Parameter mehrmals wiederholt wird. dh:
https://stackoverflow.com/?¶m=1¶m=1¶m=1¶m=1¶m=1¶m=1¶m=1¶m=1¶m=1
An diesem Punkt beginnen die Probleme. Der vorgeschlagene Ansatz könnte und wird nach mehreren Seitenaktualisierungen eine sehr lange URL erstellen, wodurch die URL ungültig wird. Folgen Sie diesem Link, um weitere Informationen zu langen URLs zu erhalten. Wie lang ist eine URL in verschiedenen Browsern maximal?
Dies ist mein vorgeschlagener Ansatz:
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;
}
Mit dieser Funktion muss man nur Folgendes tun:
location.href = URL_add_parameter(location.href, 'param', 'value');
if(window.location.search.indexOf('¶m=') == -1) {window.location.search += '¶m=1';}
indexOf
könnte die Verwendung von nun zu unnötiger Komplexität des Codes führen.
function gotoItem( item ){
var url = window.location.href;
var separator = (url.indexOf('?') > -1) ? "&" : "?";
var qs = "item=" + encodeURIComponent(item);
window.location.href = url + separator + qs;
}
Mehr kompatible Version
function gotoItem( item ){
var url = window.location.href;
url += (url.indexOf('?') > -1)?"&":"?" + "item=" + encodeURIComponent(item);
window.location.href = url;
}
Bitte überprüfen Sie den folgenden Code:
/*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;
Eine kleine Fehlerbehebung für @ yeyos nachdenkliche Antwort oben.
Veränderung:
var parameters = parser.search.split(/\?|&/);
Zu:
var parameters = parser.search.split(/\?|&/);
Versuche dies
var url = ApiUrl(`/customers`);
if(data){
url += '?search='+data;
}
else
{
url += `?page=${page}&per_page=${perpage}`;
}
console.log(url);