W aplikacji internetowej korzystającej z wywołań AJAX muszę przesłać żądanie, ale dodać parametr na końcu adresu URL, na przykład:
Oryginalny adres URL:
Wynikowy adres URL:
http: //server/myapp.php? id = 10 & enabled = true
Poszukuję funkcji JavaScript, która analizuje adres URL patrząc na każdy parametr, a następnie dodaje nowy parametr lub aktualizuje wartość, jeśli już istnieje.
javascript
url
parsing
parameters
query-string
Lessan Vaezi
źródło
źródło
Odpowiedzi:
Podstawowa implementacja, którą musisz dostosować, wyglądałaby mniej więcej tak:
Jest to około dwa razy szybsze niż rozwiązanie oparte na wyrażeniu regularnym lub wyszukiwaniu, ale zależy to całkowicie od długości kwerendy i indeksu dowolnego dopasowania
metoda powolnego wyrażenia regularnego, z którą porównywałem wyniki ze względu na ukończenia (około + 150% wolniej)
źródło
encodeURIComponent
raczej używać niżencodeURI
? W przeciwnym razie wszelkie znaki takie jak=
,&
w swojej nazwie lub wartość będzie skorumpowanego URI.Możesz użyć jednego z tych:
Przykład:
źródło
XML
do,http://foo.bar/?x=1&y=2
aby wynik końcowy byłhttp://foo.bar/?x=1&y=2&XML
. czy to możliwe? Próbowałemurl.searchParams.set('XML');
,url.searchParams.set('XML', null);
iurl.searchParams.set('XML', undefined);
- ale żaden nie pracował w Chrome 63 .Dziękuję wszystkim za Twój wkład. Kiedyś annakata kod i zmodyfikowany także przypadek, w którym nie ma ciąg kwerendy w url w ogóle. Mam nadzieję, że to pomoże.
źródło
escape(key)
iescape(value)
doencodeURIComponent
funkcji.if (kvp.length==1 && kvp[0]="")
?if (document.location.search)
To bardzo proste rozwiązanie. Nie kontroluje on istnienia parametrów i nie zmienia istniejącej wartości. Dodaje parametr do końca, dzięki czemu można uzyskać najnowszą wartość w kodzie zaplecza.
źródło
url = (url.indexOf("?") != -1 ? url.split("?")[0]+"?"+part+"&"+url.split("?")[1] : (url.indexOf("#") != -1 ? url.split("#")[0]+"?"+part+"#"+ url.split("#")[1] : url+'?'+part));
function appendQs(url, key, value) { return url + (url.indexOf('?') >= 0 ? "&" : '?') + encodeURIComponent(key) + "=" + encodeURIComponent(value); };
https://localhost/preview/inventory.html?sortci=priceASC&sortci=priceASC&sortci=stitle
.Oto znacznie uproszczona wersja, która powoduje kompromisy w zakresie czytelności i mniejszej liczby wierszy kodu zamiast mikrooptymalizowanej wydajności (i mówimy o różnicy kilku milisekund, realistycznie ... ze względu na naturę tego (działanie w lokalizacji bieżącego dokumentu ), najprawdopodobniej zostanie to uruchomione raz na stronie).
Następnie użyłbyś tego w ten sposób:
źródło
[\?&]
go([\?&])
w RegExp (sam bym go edytować, ale nie jestem pewien, czy polityka społeczności pozwala na naprawianie błędów w odpowiedziach).I pamiętaj, że parametry należy zakodować przed dołączeniem do ciągu zapytania.
http://jsfiddle.net/48z7z4kx/
źródło
http://abc.def/?a&b&b
.).Mam „klasę”, która to robi i oto:
Przesłoniłem metodę toString, więc nie ma potrzeby wywoływania QS :: getQueryString, możesz użyć QS :: toString lub, jak to zrobiłem w przykładach, polegać tylko na tym, że obiekt jest przymuszany do łańcucha.
źródło
.set pierwszy agrument jest kluczem, drugi to wartość.
źródło
Jeśli masz ciąg z adresem URL, który chcesz ozdobić paramem, możesz spróbować:
To znaczy, że ? będzie prefiksem parametru, ale jeśli już go masz ? w
urlstring
, niż & będzie prefiksem.Poleciłbym to również zrobić,
encodeURI( paramvariable )
jeśli parametr nie został zakodowany na stałe, ale jest w środkuparamvariable
; lub jeśli masz zabawne postacie.Zobacz kodowanie URL javascript dla korzystania z
encodeURI
funkcji.źródło
Jest to prosty sposób na dodanie parametru zapytania:
I to więcej tutaj .
Zwróć uwagę na specyfikacje pomocy technicznej .
źródło
Sprawdź https://github.com/derek-watson/jsUri
Manipulowanie Uri i ciągiem zapytań w javascript.
Ten projekt zawiera doskonałą bibliotekę wyrażeń regularnych parseUri autorstwa Stevena Levithana. Możesz bezpiecznie analizować adresy URL wszystkich kształtów i rozmiarów, niezależnie od tego, czy są one nieprawidłowe czy ohydne.
źródło
Kiedyś widzimy
?
pod końcowym adresem URL, znalazłem rozwiązania, które generują wyniki jakofile.php?&foo=bar
. wymyśliłem własne rozwiązanie działające idealnie tak, jak chcę!Uwaga: location.origin nie działa w IE, oto jego poprawka .
źródło
Poniższa funkcja pomoże Ci dodawać, aktualizować i usuwać parametry do lub z adresu URL.
// przyklad1 i
// przykład2
// przykład3
// przykład4
// przykład5
Oto funkcja.
źródło
To była moja własna próba, ale użyję odpowiedzi annakata, ponieważ wydaje się ona znacznie czystsza:
Znalazłem też tę wtyczkę jQuery z innego postu na stackoverflow, a jeśli potrzebujesz większej elastyczności, możesz jej użyć: http://plugins.jquery.com/project/query-object
Myślałem, że kod będzie (nie testowałem):
źródło
Dodawanie do odpowiedzi @ Vianney https://stackoverflow.com/a/44160941/6609678
Możemy zaimportować wbudowany moduł URL w węźle w następujący sposób
Przykład:
Przydatne linki:
https://developer.mozilla.org/en-US/docs/Web/API/URL https://developer.mozilla.org/en/docs/Web/API/URLSearchParams
źródło
Spróbuj tego.
źródło
url.searchParams
jest wstępnie zainicjalizowaną listą parametrów dla tegoURL
obiektu.Podoba mi się odpowiedź Mehmeta Fatiha Yıldıza, nawet on nie odpowiedział na całe pytanie.
W tym samym wierszu co jego odpowiedź używam tego kodu:
„Nie kontroluje istnienia parametru i nie zmienia istniejącej wartości. Dodaje parametr do końca”
i tester:
źródło
Poszedłbym z tym małą, ale kompletną bibliotekę do obsługi adresów URL w js:
https://github.com/Mikhus/jsurl
źródło
To jest to, czego używam, jeśli chodzi o niektóre podstawowe dodatki lub aktualizacje adresu URL po stronie serwera, takie jak Node.js.
CoffeScript:
JavaScript:
źródło
Najłatwiejsze rozwiązanie, działa, jeśli masz już tag lub nie, i usuwa je automatycznie, aby nie dodawać równych tagów, baw się dobrze
NASTĘPNIE
źródło
Odpowiedź Vianneya Bajarta jest poprawna; Jednak URL będzie działać tylko wtedy, gdy masz pełny adres URL z portem, host, ścieżki i zapytania:
I URLSearchParams będzie działać tylko wtedy, gdy przekażesz tylko ciąg zapytania:
Jeśli masz niepełny lub względny adres URL i nie zależy ci na podstawowym adresie URL, możesz po prostu podzielić przez,
?
aby uzyskać ciąg zapytania i dołączyć później w następujący sposób:Nie jest kompatybilny z Internet Explorerem.
źródło
var u = new URL(window.location), usp = u.searchParams;
, nie musisz używać żadnego fantazyjnego podziału strun.setUrlParams('https://example.com?foo=thing???&bar=baz', 'baz', 'qux') => "https://example.com?foo=thing&baz=qux???&bar=baz"
Jeśli masz problemy z urlami w linkach lub gdzieś indziej, być może będziesz musiał wziąć pod uwagę skrót. Oto dość proste do zrozumienia rozwiązanie. Prawdopodobnie nie NAJSZYBSZY, ponieważ używa wyrażenia regularnego ... ale w 99,999% przypadków różnica naprawdę nie ma znaczenia!
źródło
Najprostszym rozwiązaniem, jakie mogę wymyślić, jest ta metoda, która zwróci zmodyfikowany identyfikator URI. Czuję, że większość z was pracuje zbyt ciężko.
źródło
Ok, tutaj porównuję Dwie funkcje, jedna wykonana przeze mnie (regExp), a druga przez (annakata).
Podzielona tablica:
Metoda Regexp:
Przypadek testowy:
Wydaje się, że nawet przy najprostszym rozwiązaniu (kiedy regexp używa tylko testu i nie wchodzi w funkcję .replace), to wciąż jest wolniejsze niż dzielenie ... Cóż. Regexp jest trochę powolny, ale ... uhh ...
źródło
Oto co robię. Za pomocą mojej funkcji editParams () możesz dodawać, usuwać lub zmieniać dowolny parametr, a następnie użyć wbudowanej funkcji replaceState () do aktualizacji adresu URL:
źródło
Jak najlepiej mogę powiedzieć, żadna z powyższych odpowiedzi nie dotyczy przypadku, w którym ciąg zapytania zawiera parametry, które same są tablicą, a zatem będą pojawiać się więcej niż jeden raz, np .:
Poniższą funkcję napisałem do zaktualizowania
document.location.search
. Bierze tablicę tablic pary klucz / wartość jako argument i zwraca poprawioną wersję tej drugiej, którą możesz zrobić, co chcesz. Używam tego w ten sposób:Jeśli bieżący adres URL to:
http://example.com/index.php?test=replaceme&sizes[]=XL
To by cię dopadło
http://example.com/index.php?test=123&sizes[]=XL&sizes[]=XXL&best=456
Funkcjonować
źródło
Wypróbuj
wyrażenia regularne, tak powolne, a zatem:
Przykład:
źródło
Dzięki nowym osiągnięciom w JS można tutaj dodać parametr zapytania do adresu URL:
Zobacz także tę możliwość Moziila URLSearchParams.append ()
źródło
Działa to we wszystkich nowoczesnych przeglądarkach.
źródło
Resetuj cały ciąg zapytania
źródło