Nicholas Ortenzio hat das geschrieben, ein kleines Plugin
jQuery.extend({
getQueryParameters : function(str) {
return (str || document.location.search).replace(/(^\?)/,'').split("&").map(function(n){return n = n.split("="),this[n[0]] = n[1],this}.bind({}))[0];
}
});
Wenn die URL also lautet
Kannst du tun
var queryParams = $.getQueryParameters();
Und queryParams wird ein Objekt sein wie
{
"lunch": "sandwich",
"dinner": "stirfry"
}
Also sehr praktisch. Ich frage mich, ob es eine Möglichkeit gibt, auch herunterladbare Snippets wie dieses bereitzustellen, um sie einfach in Codebox usw. zu importieren.
Jedes Mal, wenn ich benutzerdefinierte Algorithmen zur Analyse von Abfragezeichenfolgen sehe, bekomme ich einen Anfall, weil sie so gut wie immer falsch sind.
Zum Beispiel sollte
?foo=bar;foo=bazFolgendes ergeben:Und dieser Code kann das offensichtlich nicht.
zzzzBov, was ist mit dieser modifizierten Alternative?
@Ben
Das ist die Art von Funktion, bei der man vor dem Schreiben Unit-Tests einrichten sollte. Mit ein wenig Testen habe ich festgestellt, dass die folgenden Strings fehlgeschlagen sind:
'?=&=''?foo=bar&foo=baz;foo=qux'''** Ich habe den Algorithmus modifiziert, um
|| document.location.searchzu entfernen, um Strings explizit zu testen@zzzzBav: Wenn Sie diese Abfragezeichenfolge an PHP übergeben (vorausgesetzt, Sie haben ";" als Parametertrennzeichen definiert), würde dies das Gleiche ergeben wie dieses Skript: Der letzte Wert gewinnt den Schlüssel. Um das von Ihnen vorgeschlagene Array zu erstellen, bräuchten Sie:
?foo[]=bar;foo[]=baz. Das obige Skript würde immer noch nur{"foo[]":"baz"}ergeben.Es ist ein Skript mit engem Geltungsbereich, das nicht für fortgeschrittene Datenstrukturen gedacht ist. In diesem Kontext betrachtet, ist es elegant, schnell und einfach zu implementieren.
Entschuldigung, ich meinte zzzzBov. :)
@Joe t, PHP verwendet einen völlig anderen Standard für die Analyse von Abfragezeichenfolgen. Seien Sie vorsichtig, wenn Sie Abfragezeichenfolgen analysieren, die in PHP-Anwendungen verwendet werden.
@zzzzBov, nach dieser Logik sollten wir uns vor Abfragezeichenfolgen in Acht nehmen, die von jeder Sprache verwendet werden, da es keinen allgemein anerkannten Standard gibt. Ruby, PHP, Python, .Net… Wer hat Recht? Welchem sollte JavaScript folgen? (Und warum ist
queryTeil des JavaScript-location-Objekts, es gibt aber keinen integrierten Parser?)Zugegeben, von einem JavaScript-Parser für Abfragezeichenfolgen zu erwarten, dass er alle vorhandenen Variationen verarbeitet, ist lächerlich. Vorsicht ist immer geboten.
Es ist ein Beispiel dafür, wie es gemacht werden kann, nicht eine universelle Lösung. Da in den meisten Fällen der Programmierer, der es verwendet, auch die Abfragezeichenfolge selbst kontrolliert, sollte es offensichtlich an die Bedürfnisse angepasst werden. :-)
@zzzzBov Ich stimme @joe zu. Ich denke, der beabsichtigte Anwendungsfall hier wäre die "normale" Verwendung von Abfragezeichenfolgen. Was wären die Anwendungsfälle für die Ausnahmen, die Sie gefunden haben? Ich sehe die Gültigkeit Ihres ursprünglichen Problems, dass Kontrollkästchen und Mehrfachauswahl eine Abfragezeichenfolge mit redundanten Schlüsseln rendern würden, aber Sonderzeichen oder Gleichheitszeichen ohne Schlüssel? Ich bin daran interessiert, die Situationen zu hören, in denen Sie diese als nützliche Fälle angetroffen haben.
Außerdem ist das Unit-Testing eines vorgeschlagenen alternativen Skripts in einem Blog-Kommentar-Feed vielleicht etwas übertrieben, oder?
Der Grund, warum ich es angesprochen habe, ist, die Leute darauf aufmerksam zu machen, dass die Analyse von Abfragezeichenfolgen nichts ist, was einer billigen, selbstgebastelten Lösung überlassen werden sollte. Grenzfälle sind erst dann ein Problem, wenn sie einen treffen.
Dies behandelt auch keine URL-Kodierung. Wenn eine URL-kodierte Abfragezeichenfolge durch dieses läuft, enthält das resultierende Objekt immer noch den kodierten Text. Was meiner Erfahrung nach falsch ist.
Ich denke, es sollte auch ein kleines Update für den RegEx in der Ersetzung geben:
Dies entfernt den gesamten Text vor dem ?. Der ursprüngliche RegEx erfordert, dass Sie Folgendes übergeben:
Das Update ermöglicht es Ihnen, Folgendes zu übergeben:
jQuery hat jetzt
$.getParams(url);Woher hast du diese Information? Kannst du einen Link zur Dokumentation angeben?
Probieren Sie das mal aus, es scheint mit den von zzzBov genannten Testfällen zu funktionieren. http://jsfiddle.net/EldonMcGuinness/cb57dusv/
Ich wollte nur hinzufügen, dass ich diesen Code auf meiner Website als JQuery-Plugin veröffentlicht und ihn in meiner Suchmaschine verwendet habe, probieren Sie es gerne aus.
Sollte den Fall ohne Parameter besser behandeln. Modifizierte Version. Gibt {} zurück, falls kein/inkonsistenter String vorhanden ist.
Abfragezeichenfolgenparameter sollten dekodiert werden. Hier ist also ein behobenes Beispiel
Was ich getan habe, ist,
n[1]mitdecodeURIComponentzu versehenIch habe dies heute für meine Website verwendet und eine kleine Verbesserung an der Methode vorgenommen. Anstatt die Array-Funktion 'map' zu verwenden, habe ich die Funktion 'reduce' verwendet, sie gibt ein einzelnes Objekt anstelle eines Arrays zurück.
Code-Beispiel
http://codepen.io/nloos/pen/RRxkYN
example_length=10&id=LAF-000021&id=LAF-000028 , ich möchte das in JSON konvertieren. aber es
id kommt nur als Array.
Funktioniert super! JSHint mag das aber nicht. Es beschwert sich, dass es eine "unerwartete Verwendung eines Kommaoperators" gibt.