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


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;

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.


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');

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


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

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;

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;/);


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

0

Również:

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

Tylko jedna linijka odpowiedzi Shlomi do wykorzystania w bookmarkletach


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).


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.