In einer Webanwendung, die AJAX-Aufrufe verwendet, muss ich eine Anfrage senden, aber am Ende der URL einen Parameter hinzufügen, zum Beispiel:
Ursprüngliche URL:
Resultierende URL:
http: //server/myapp.php? id = 10 & enabled = true
Suchen Sie nach einer JavaScript-Funktion, die die URL analysiert, die jeden Parameter betrachtet, dann den neuen Parameter hinzufügt oder den Wert aktualisiert, falls bereits einer vorhanden ist.
javascript
url
parsing
parameters
query-string
Lessan Vaezi
quelle
quelle
Antworten:
Eine grundlegende Implementierung, die Sie anpassen müssen, sieht ungefähr so aus:
Dies ist ungefähr doppelt so schnell wie eine Regex- oder suchbasierte Lösung, hängt jedoch vollständig von der Länge des Querystrings und dem Index einer Übereinstimmung ab
die langsame Regex-Methode, mit der ich aus Gründen der Fertigstellung verglichen habe (ca. + 150% langsamer)
quelle
encodeURIComponent
lieber verwenden alsencodeURI
? Ansonsten alle Zeichen wie=
,&
in Ihrem Namen oder Wert , wird der URI.Sie können eine davon verwenden:
Beispiel:
quelle
XML
,http://foo.bar/?x=1&y=2
damit das Endergebnis isthttp://foo.bar/?x=1&y=2&XML
. Ist das möglich? Ich habe versuchturl.searchParams.set('XML');
,url.searchParams.set('XML', null);
undurl.searchParams.set('XML', undefined);
- aber keiner arbeitete in Chrome 63 .Vielen Dank für Ihren Beitrag. Ich habe Annakata- Code verwendet und geändert, um auch den Fall einzuschließen, in dem die URL überhaupt keine Abfragezeichenfolge enthält. Hoffe das würde helfen.
quelle
escape(key)
undescape(value)
zuencodeURIComponent
funktionieren.if (kvp.length==1 && kvp[0]="")
?if (document.location.search)
Dies ist eine sehr einfache Lösung. Es steuert nicht die Existenz von Parametern und ändert den vorhandenen Wert nicht. Es fügt Ihren Parameter zum Ende hinzu, sodass Sie den neuesten Wert in Ihrem Back-End-Code erhalten können.
quelle
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
.Hier ist eine stark vereinfachte Version, die Kompromisse hinsichtlich der Lesbarkeit und weniger Codezeilen anstelle einer mikrooptimierten Leistung eingeht (und wir sprechen realistisch von einem Unterschied von einigen Millisekunden) ), dies wird höchstwahrscheinlich einmal auf einer Seite ausgeführt).
Sie würden dies dann folgendermaßen verwenden:
quelle
[\?&]
durch([\?&])
in RegExp (ich würde es nur selbst bearbeiten, bin mir aber nicht sicher, ob die Community-Richtlinie das Beheben von Fehlern in Antworten erlaubt).Beachten Sie außerdem, dass die Parameter codiert werden sollten, bevor sie in die Abfragezeichenfolge eingefügt werden.
http://jsfiddle.net/48z7z4kx/
quelle
http://abc.def/?a&b&b
. B. ), anstatt sie zu ersetzen .Ich habe eine 'Klasse', die dies tut und hier ist es:
Ich habe die toString-Methode überschrieben, sodass QS :: getQueryString nicht aufgerufen werden muss. Sie können QS :: toString verwenden oder sich, wie in den Beispielen beschrieben, nur darauf verlassen, dass das Objekt in eine Zeichenfolge gezwungen wird.
quelle
.set first agrument ist der Schlüssel, das zweite ist der Wert.
quelle
Wenn Sie eine Zeichenfolge mit einer URL haben, die Sie mit einem Parameter dekorieren möchten, können Sie Folgendes versuchen:
Das heißt das ? wird das Präfix des Parameters sein, aber wenn Sie bereits haben ? in
urlstring
, als & wird das Präfix sein.Ich würde es auch empfehlen,
encodeURI( paramvariable )
wenn Sie den Parameter nicht fest codiert haben, er sich jedoch in einem befindetparamvariable
. oder wenn du lustige Charaktere darin hast.Informationen zur Verwendung der
encodeURI
Funktion finden Sie unter Javascript-URL-Codierung .quelle
Dies ist eine einfache Möglichkeit, einen Abfrageparameter hinzuzufügen:
Und das ist es mehr hier .
Bitte beachten Sie die Support-Spezifikationen .
quelle
Überprüfen Sie https://github.com/derek-watson/jsUri
Manipulation von Uri- und Abfragezeichenfolgen in Javascript.
Dieses Projekt beinhaltet die exzellente parseUri-Bibliothek für reguläre Ausdrücke von Steven Levithan. Sie können URLs aller Formen und Größen sicher analysieren, unabhängig davon, ob sie ungültig oder abscheulich sind.
quelle
Irgendwann sehen wir
?
am Ende URL, ich habe einige Lösungen gefunden, die Ergebnisse als generierenfile.php?&foo=bar
. Ich habe meine eigene Lösung gefunden, die perfekt funktioniert, wie ich will!Hinweis: location.origin funktioniert nicht im IE. Hier ist die Korrektur .
quelle
Die folgende Funktion hilft Ihnen beim Hinzufügen, Aktualisieren und Löschen von Parametern zur oder von der URL.
// Beispiel1und
// Beispiel2
// Beispiel3
// Beispiel4
// Beispiel5
Hier ist die Funktion.
quelle
Dies war mein eigener Versuch, aber ich werde die Antwort von Annakata verwenden, da sie viel sauberer erscheint:
Außerdem habe ich dieses jQuery-Plugin aus einem anderen Beitrag zu stackoverflow gefunden. Wenn Sie mehr Flexibilität benötigen, können Sie dies verwenden: http://plugins.jquery.com/project/query-object
Ich würde denken, der Code wäre (noch nicht getestet):
quelle
Hinzufügen zu @ Vianneys Antwort https://stackoverflow.com/a/44160941/6609678
Wir können das integrierte URL-Modul wie folgt in den Knoten importieren
Beispiel:
Nützliche Links:
https://developer.mozilla.org/en-US/docs/Web/API/URL https://developer.mozilla.org/en/docs/Web/API/URLSearchParams
quelle
Versuche dies.
quelle
url.searchParams
ist die vorinitialisierte Parameterliste für diesesURL
Objekt.Ich mag die Antwort von Mehmet Fatih Yıldız, auch wenn er nicht die ganze Frage beantwortet hat.
In derselben Zeile wie seine Antwort verwende ich diesen Code:
"Es steuert nicht die Existenz von Parametern und ändert den vorhandenen Wert nicht. Es fügt Ihren Parameter am Ende hinzu."
und der Tester:
quelle
Ich würde mit dieser kleinen, aber vollständigen Bibliothek URLs in js verarbeiten:
https://github.com/Mikhus/jsurl
quelle
Dies ist, was ich verwende, wenn es um einige grundlegende Ergänzungen oder Aktualisierungen von URL-Parametern auf der Serverseite wie Node.js geht.
CoffeScript:
JavaScript:
quelle
Die einfachste Lösung, funktioniert, wenn Sie bereits ein Tag haben oder nicht, und entfernt es automatisch, damit nicht immer gleiche Tags hinzugefügt werden. Viel Spaß
DANN
quelle
Die Antwort von Vianney Bajart ist richtig; Die URL funktioniert jedoch nur, wenn Sie über die vollständige URL mit Port, Host, Pfad und Abfrage verfügen:
Und URLSearchParams funktioniert nur, wenn Sie nur die Abfragezeichenfolge übergeben :
Wenn Sie eine unvollständige oder relative URL haben und sich nicht für die Basis-URL interessieren, können Sie diese einfach aufteilen
?
, um die Abfragezeichenfolge abzurufen und später wie folgt beizutreten:Nicht kompatibel mit Internet Explorer.
quelle
var u = new URL(window.location), usp = u.searchParams;
Sie keine ausgefallene String-Aufteilung verwenden.setUrlParams('https://example.com?foo=thing???&bar=baz', 'baz', 'qux') => "https://example.com?foo=thing&baz=qux???&bar=baz"
Wenn Sie mit URLs in Links oder anderswo herumspielen, müssen Sie möglicherweise auch den Hash berücksichtigen. Hier ist eine ziemlich einfach zu verstehende Lösung. Wahrscheinlich nicht das SCHNELLSTE, da es einen regulären Ausdruck verwendet ... aber in 99,999% der Fälle spielt der Unterschied wirklich keine Rolle!
quelle
Die einfachste Lösung, die ich mir vorstellen kann, ist diese Methode, die den geänderten URI zurückgibt. Ich habe das Gefühl, dass die meisten von Ihnen viel zu hart arbeiten.
quelle
Ok, hier vergleiche ich zwei Funktionen, eine von mir (regExp) und eine von (annakata).
Geteiltes Array:
Regexp-Methode:
Testfall:
Es scheint, dass selbst mit der einfachsten Lösung (wenn Regexp nur Test verwendet und die .replace-Funktion nicht eingibt) es immer noch langsamer ist als das Teilen ... Nun. Regexp ist ein bisschen langsam, aber ... äh ...
quelle
Hier ist was ich tue. Mit meiner Funktion editParams () können Sie beliebige Parameter hinzufügen, entfernen oder ändern und anschließend die URL mithilfe der integrierten Funktion replaceState () aktualisieren:
quelle
Wie am besten kann ich sagen, dass keine der obigen Antworten den Fall betrifft, in dem die Abfragezeichenfolge Parameter enthält, die selbst ein Array sind und daher mehrmals vorkommen, z.
Die folgende Funktion habe ich geschrieben, um zu aktualisieren
document.location.search
. Es verwendet ein Array von Schlüssel / Wert-Paar-Arrays als Argument und gibt eine überarbeitete Version des letzteren zurück, mit der Sie tun können, was Sie möchten. Ich benutze es so:Wenn die aktuelle URL war:
http://example.com/index.php?test=replaceme&sizes[]=XL
Das würde dich kriegen
http://example.com/index.php?test=123&sizes[]=XL&sizes[]=XXL&best=456
Funktion
quelle
Versuchen Sie
die regulären Ausdrücke, so langsam, also:
Beispiel:
quelle
Mit den neuen Errungenschaften in JS können Sie der URL folgende Abfrageparameter hinzufügen:
Siehe auch diese Möglichkeit Moziila URLSearchParams.append ()
quelle
Dies funktioniert in allen modernen Browsern.
quelle
Setzen Sie alle Abfragezeichenfolgen zurück
quelle