dołącz do adresu URL i odśwież stronę

137

Chcę napisać fragment javascript, który doda parametr do bieżącego adresu URL, a następnie odświeży stronę - jak mogę to zrobić?

amator
źródło
Najbardziej zoptymalizowane rozwiązanie, które znalazłem: stackoverflow.com/a/38792165/1783439
nu everest

Odpowiedzi:

167

to powinno działać (nie testowane!)

var url = window.location.href;    
if (url.indexOf('?') > -1){
   url += '&param=1'
}else{
   url += '?param=1'
}
window.location.href = url;
Shlomi Komemi
źródło
1
str.search (regex) jest szybsze niż srt.indexOf (str2)
xavierm02
1
I powinieneś podać przykład ull z nazwą zmiennej i parametrem zmiennej z encodeURIComponent ().
xavierm02
I zamiast> -1, powinieneś użyć! == -1
xavierm02
9
po tym, jak można dodać logikę, że jeśli parametr już istnieje w adresie URL, aktualizuję jego wartość zamiast dodawać nowy parametr?
amatorskie
1
to usunie zakotwiczenie (wartość skrótu) z adresu URL, jeśli istniał, @amateur możesz znaleźć funkcję, która to robi tutaj: stackoverflow.com/questions/486896/…
Doug Molineux
145

Krótsza niż zaakceptowana odpowiedź, robiąc to samo, ale zachowując prostotę:

window.location.search += '&param=42';

Nie musimy zmieniać całego adresu URL, tylko ciąg zapytania, znany jako atrybut wyszukiwania lokalizacji.

Podczas przypisywania wartości do atrybutu wyszukiwania, znak zapytania jest automatycznie wstawiany przez przeglądarkę i strona jest ponownie ładowana.

Bo Frederiksen
źródło
11
W przypadku, gdy wiesz, że będzie to jedyny parametr, możesz również ustawić wyszukiwanie zamiast window.location.search = '?param=42';
dodawać
1
Dobra robota!! Właściwy, najprostszy i zoptymalizowany sposób; powinna była być zaakceptowana.
Rohit
A jeśli Twój adres URL to: www.mysite.com ... to czy nie utworzy adresu URL: www.mysite.com & param = 42, który wymagałby znaku „?” znak, ponieważ jest to jedyny parametr w adresie URL. Podoba mi się odpowiedź @Shlomi Komemi, ponieważ obejmuje te 2 główne scenariusze.
GreaterKing
1
@greaterKing przeglądarka dodaje znak zapytania podczas dodawania parametrów do atrybutu wyszukiwania lokalizacji. Wypróbuj w konsoli przeglądarki.
Bo Frederiksen,
1
Mój zły @BoFrederiksen, rzeczywiście masz rację ... srry o tym. „+ =” z grubsza ... przegapiłem to. +1 ode mnie.
GreaterKing
73

Większość odpowiedzi sugeruje, że należy dołączyć parametr (y) do adresu URL, coś w rodzaju poniższego fragmentu lub podobnej odmiany:

location.href = location.href + "&parameter=" + value;

W większości przypadków będzie to działać całkiem dobrze.

jednak

Moim zdaniem nie jest to właściwy sposób dołączania parametru do adresu URL.

Ponieważ sugerowane podejście nie sprawdza, czy parametr jest już ustawiony w adresie URL, jeśli nie będziesz ostrożny, możesz otrzymać bardzo długi adres URL z tym samym parametrem powtórzonym wiele razy. to znaczy:

https://stackoverflow.com/?&param=1&param=1&param=1&param=1&param=1&param=1&param=1&param=1&param=1

w tym momencie zaczynają się problemy. Sugerowane podejście może i spowoduje utworzenie bardzo długiego adresu URL po wielu odświeżeniach strony, przez co adres URL będzie nieprawidłowy. Kliknij to łącze, aby uzyskać więcej informacji na temat długich adresów URL. Jaka jest maksymalna długość adresu URL w różnych przeglądarkach?

Oto moje sugerowane podejście:

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

Dzięki tej funkcji wystarczy wykonać następujące czynności:

location.href = URL_add_parameter(location.href, 'param', 'value');
yeyo
źródło
1
Dlaczego nie po prostu użyć:if(window.location.search.indexOf('&param=') == -1) {window.location.search += '&param=1';}
538ROMEO
@ SébastienGarcia-Roméo Tak, to ciekawe podejście i rzeczywiście słuszne, jednak istnieją dwa powody, dla których funkcja jest zaprogramowana w ten sposób. 1. Aby wyeliminować istniejące zduplikowane parametry. 2. Nadpisać wartość istniejącego parametru. Z tego punktu widzenia, teraz użycie indexOfmoże wprowadzić do kodu niepotrzebną złożoność.
yeyo
3
location.href = location.href + "&parameter=" + value;
Paul Alexander
źródło
3
Parametry się powielają
Arun Prasad ES
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;
}

Więcej kompatybilnej wersji

function gotoItem( item ){
    var url = window.location.href;    
    url += (url.indexOf('?') > -1)?"&":"?" + "item=" + encodeURIComponent(item);
    window.location.href = url;
}
epascarello
źródło
1

Sprawdź poniższy kod:

/*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;
Aftab
źródło
1

Jedna mała poprawka błędu dla przemyślanej odpowiedzi @ yeyo powyżej.

Zmiana:

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

Do:

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

Gabrien
źródło
Prosimy o umieszczanie takich poprawek w komentarzu lub proponowanie i edytowanie. Nie gwarantują oddzielnej odpowiedzi.
JJJ
1

Spróbuj tego

var url = ApiUrl(`/customers`);
  if(data){
   url += '?search='+data; 
  }
  else
  { 
      url +=  `?page=${page}&per_page=${perpage}`;
  }
  console.log(url);
Atchutha rama reddy Karri
źródło
0

Również:

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

Tylko jedna linijka odpowiedzi Shlomi do wykorzystania w bookmarkletach

estani
źródło
0

Ta linia kodu JS pobiera link bez parametrów (tj. Przed '?'), a następnie dodaje do niego parametry.

window.location.href = (window.location.href.split('?')[0]) + "?p1=ABC&p2=XYZ";

Powyższy wiersz kodu zawiera dwa parametry p1i p2odpowiednie wartości 'ABC'i 'XYZ'(dla lepszego zrozumienia).

Anmol
źródło