aggiungi alla pagina url e aggiorna


Risposte:


162

questo dovrebbe funzionare (non testato!)

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

1
str.search (regex) è più veloce di srt.indexOf (str2)
xavierm02

1
E dovresti dare un esempio ull con un nome di variabile e un parametro variabile con encodeURIComponent ().
xavierm02,

E isteand di> -1, dovresti usare! == -1
xavierm02

8
uno segue a questo, come posso aggiungere qualche logica che se il parametro esiste già in un url aggiorno il suo valore piuttosto che aggiungere un nuovo parametro?
dilettante

1
questo toglierà l'ancora (valore hash) dall'URL, se esistesse, @amateur puoi trovare una funzione che lo fa qui: stackoverflow.com/questions/486896/…
Doug Molineux,

143

Più breve della risposta accettata, facendo lo stesso, ma mantenendolo semplice:

window.location.search += '&param=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.


11
Per un caso in cui sai che questo sarà l'unico parametro, puoi anche impostare la ricerca invece di aggiungerla:window.location.search = '?param=42';
Dave DuPlantis,

1
Ottimo lavoro!! Il modo corretto, più semplice e ottimizzato; avrebbe dovuto essere la risposta accettata.
Rohit,

Che cosa succede se il tuo url è: www.mysite.com ... quindi non creerà l'url: www.mysite.com & param = 42 che avrebbe bisogno del "?" carattere poiché è l'unico parametro nell'URL. Mi piace la risposta di @Shlomi Komemi in quanto copre questi 2 scenari principali.
re maggiore il

1
@greaterKing il browser aggiunge il punto interrogativo, quando si aggiungono parametri all'attributo di ricerca della posizione. Provalo nella console del tuo browser.
Bo Frederiksen,

1
Mio cattivo @BoFrederiksen hai davvero ragione ... sbrigati a riguardo. "+ =" di grossolana ... mancava quello. +1 da me.
Re

70

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 + "&parameter=" + 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/?&param=1&param=1&param=1&param=1&param=1&param=1&param=1&param=1&param=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');

1
Perché non usare solo:if(window.location.search.indexOf('&param=') == -1) {window.location.search += '&param=1';}
538ROMEO

@ SébastienGarcia-Roméo Sì, questo è un approccio interessante, e in effetti valido, tuttavia, ci sono due ragioni per cui la funzione è programmata in quel modo. 1. Per eliminare i parametri duplicati esistenti. 2. Per sovrascrivere il valore di un parametro esistente. Da questo punto di vista, ora l'uso di indexOfpotrebbe introdurre inutili complessità nel codice.
yeyo,


2
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;
}

1

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

1

Una piccola correzione di bug per la risposta riflessiva di @ yeyo sopra.

Modificare:

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

Per:

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


Si prega di inviare tali correzioni in un commento o proporre e modificare. Non garantiscono una risposta separata.
JJ per Transparency e Monica

1

Prova questo

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

0

Anche:

window.location.href += (window.location.href.indexOf('?') > -1 ? '&' : '?') + 'param=1'

Solo una riga di risposta Shlomi utilizzabile nei bookmarklet

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.