Sto cercando di scrivere un pezzo di javascript che aggiungerà un parametro all'URL corrente e quindi aggiorni la pagina - come posso farlo?
Sto cercando di scrivere un pezzo di javascript che aggiungerà un parametro all'URL corrente e quindi aggiorni la pagina - come posso farlo?
Risposte:
questo dovrebbe funzionare (non testato!)
var url = window.location.href;
if (url.indexOf('?') > -1){
url += '¶m=1'
}else{
url += '?param=1'
}
window.location.href = url;
Più breve della risposta accettata, facendo lo stesso, ma mantenendolo semplice:
window.location.search += '¶m=42';
Non è necessario modificare l'intero URL, ma solo la stringa di query, nota come attributo di ricerca della posizione.
Quando si assegna un valore all'attributo di ricerca, il punto interrogativo viene automaticamente inserito dal browser e la pagina viene ricaricata.
window.location.search = '?param=42';
La maggior parte delle risposte qui suggerisce che si dovrebbe aggiungere i parametri all'URL, qualcosa come il seguente frammento o una variazione simile:
location.href = location.href + "¶meter=" + value;
Funzionerà abbastanza bene per la maggior parte dei casi.
però
A mio avviso, non è il modo corretto di aggiungere un parametro a un URL.
Poiché l'approccio suggerito non verifica se il parametro è già impostato nell'URL, in caso contrario si può finire con un URL molto lungo con lo stesso parametro ripetuto più volte. vale a dire:
https://stackoverflow.com/?¶m=1¶m=1¶m=1¶m=1¶m=1¶m=1¶m=1¶m=1¶m=1
a questo punto è dove iniziano i problemi. L'approccio suggerito potrebbe e creerà un URL molto lungo dopo l'aggiornamento di più pagine, rendendo così l'URL non valido. Segui questo link per ulteriori informazioni sull'URL lungo Qual è la lunghezza massima di un URL in diversi browser?
Questo è il mio approccio suggerito:
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;
}
Con questa funzione si dovrà semplicemente fare quanto segue:
location.href = URL_add_parameter(location.href, 'param', 'value');
if(window.location.search.indexOf('¶m=') == -1) {window.location.search += '¶m=1';}
indexOf
potrebbe introdurre inutili complessità nel codice.
function gotoItem( item ){
var url = window.location.href;
var separator = (url.indexOf('?') > -1) ? "&" : "?";
var qs = "item=" + encodeURIComponent(item);
window.location.href = url + separator + qs;
}
Versione più compatibile
function gotoItem( item ){
var url = window.location.href;
url += (url.indexOf('?') > -1)?"&":"?" + "item=" + encodeURIComponent(item);
window.location.href = url;
}
Si prega di controllare il codice qui sotto:
/*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;
Una piccola correzione di bug per la risposta riflessiva di @ yeyo sopra.
Modificare:
var parameters = parser.search.split(/\?|&/);
Per:
var parameters = parser.search.split(/\?|&/);
Prova questo
var url = ApiUrl(`/customers`);
if(data){
url += '?search='+data;
}
else
{
url += `?page=${page}&per_page=${perpage}`;
}
console.log(url);