Ich frage mich nur, ob in Javascript etwas integriert ist, das ein Formular annehmen und die Abfrageparameter zurückgeben kann, z. "var1=value&var2=value2&arr[]=foo&arr[]=bar..."
Ich habe mich das seit Jahren gefragt.
javascript
string
forms
get
Liam
quelle
quelle
Antworten:
Ich habe vor einiger Zeit versucht, nach einer Antwort auf diese Frage zu suchen, aber am Ende habe ich meine eigene Funktion geschrieben, die die Werte aus dem Formular extrahiert.
Es ist nicht perfekt, aber es passt zu meinen Bedürfnissen.
form_params gibt eine (Schlüssel -> Wert) Zuordnung der Parameter zurück. Die Eingabe ist das Formularelement (DOM-Element).
Es werden keine Felder verarbeitet, die eine Mehrfachauswahl ermöglichen.
quelle
new Array()
, um ein Wörterbuch zu initialisieren. Aber andererseits sieht der Code viel sauberer aus als der Mist, den ich heutzutage schreiben würde!2k20-Update: Verwenden Sie Joshs Lösung mit URLSearchParams.toString () .
Alte Antwort:
Ohne jQuery
Ändern Sie für Browser, die keine Pfeilfunktionssyntax unterstützen, für die ES5 erforderlich ist, die
.map...
Zeile inquelle
Wenn Sie jQuery verwenden, sollten Sie http://api.jquery.com/jQuery.param/ überprüfen.
jQuery.param()
Beispiel:
quelle
$.param($('#myform').serializeArray())
.$('#myform').serialize()
jQuery !== JavaScript
jQuery.param()
hier github.com/jquery/jquery/blob/master/src/serialize.js :)someStr=value1&someObj[a]=5&someObj[b]=6&someArr[]=1&someArr[]=2
Die URLSearchParams-API ist in allen modernen Browsern verfügbar. Beispielsweise:
quelle
params.append(key, value)
Um dies zu ergänzen, können Sie später in komplizierteren Szenarien neue Suchparameter hinzufügen.x=null&y=undefined
const url = new URL("https://stackoverflow.com")
, können Sie dessenurl.search = new URLSearchParams({foo: "bar"})
url.searchParams.append("foo", "bar")
Dies beantwortet Ihre Frage nicht direkt, aber hier ist eine generische Funktion, die eine URL erstellt, die Abfragezeichenfolgenparameter enthält. Die Parameter (Namen und Werte) werden zur Aufnahme in eine URL sicher maskiert.
quelle
new Array
Weile initialisieren, während Sie sie tatsächlich als Objekt verwenden? o, OMit jQuery können Sie dies tun, indem Sie
$.param
quelle
ES2017 (ES8)
Verwenden von
Object.entries()
, wodurch ein Array von Objektpaaren zurückgegeben[key, value]
wird. Zum Beispiel{a: 1, b: 2}
würde es zurückkehren[['a', 1], ['b', 2]]
. Es wird nicht nur vom IE unterstützt (und wird es auch nicht sein).Code:
Beispiel:
Ergebnis:
quelle
Nein, ich glaube nicht, dass Standard-JavaScript das eingebaut hat, aber Prototype JS hat diese Funktion (sicherlich haben die meisten anderen JS-Frameworks auch, aber ich kenne sie nicht), sie nennen es serialisieren .
Ich kann Prototype JS empfehlen, es funktioniert ganz gut. Der einzige Nachteil, den ich wirklich bemerkt habe, ist die Größe (einige hundert KB) und der Umfang (viel Code für Ajax, Dom usw.). Wenn Sie also nur einen Formularserialisierer möchten, ist dieser übertrieben, und genau genommen, wenn Sie nur die Ajax-Funktionalität wünschen (für die ich ihn hauptsächlich verwendet habe), ist er übertrieben. Wenn Sie nicht vorsichtig sind, werden Sie möglicherweise feststellen, dass es etwas zu viel "Magie" bewirkt (wie das Erweitern jedes dom-Elements, das es berührt, mit Prototype JS-Funktionen, nur um Elemente zu finden), was es in extremen Fällen langsam macht.
quelle
Querystring kann helfen.
Also kannst du
quelle
Wenn Sie keine Bibliothek verwenden möchten, sollte dies die meisten / alle gleichen Formularelementtypen abdecken.
quelle
Sie benötigen dazu kein Formular für Prototype. Verwenden Sie einfach die Object.toQueryString-Funktion :
quelle
Sie können dies heutzutage mit
FormData
undURLSearchParams
ohne die Notwendigkeit tun, irgendetwas zu durchlaufen.Ältere Browser benötigen jedoch eine Polyfüllung.
quelle
Ich bin mir selbst nicht ganz sicher, ich erinnere mich, dass jQuery dies bis zu einem gewissen Grad getan hat, aber es verarbeitet überhaupt keine hierarchischen Datensätze, geschweige denn auf PHP-freundliche Weise.
Eine Sache, die ich mit Sicherheit weiß, ist, dass Sie beim Erstellen von URLs und beim Einfügen des Produkts in den Dom nicht nur String-Kleber verwenden, da Sie sich sonst einem praktischen Seitenumbruch öffnen.
Zum Beispiel integriert bestimmte Werbesoftware die Versionszeichenfolge von dem, auf dem Ihr Flash ausgeführt wird. Dies ist in Ordnung, wenn es sich um eine generische einfache Zeichenfolge handelt, die jedoch sehr naiv ist und für Leute, die Gnash installiert haben, in einem peinlichen Durcheinander explodiert, da die Versionszeichenfolge von gnash zufällig eine vollständige GPL-Copyright-Lizenz mit URLs enthält und <a href> -Tags. Wenn Sie dies in Ihrem String-Glue-Advertiser-Generator verwenden, wird die Seite aufgeblasen und im Dom wird unausgeglichenes HTML angezeigt.
Die Moral der Geschichte:
Nicht:
Google muss diesen Trick lernen. Ich habe versucht, das Problem zu melden, sie scheinen sich nicht darum zu kümmern.
quelle
Wie Stein sagt, können Sie die Prototyp-Javascript-Bibliothek von http://www.prototypejs.org verwenden . Fügen Sie die JS hinzu und es ist dann sehr einfach,
$('formName').serialize()
wird zurückgeben, was Sie wollen!quelle
Für diejenigen von uns, die jQuery bevorzugen, würden Sie das Formular-Plugin verwenden: http://plugins.jquery.com/project/form , das eine formSerialize-Methode enthält.
quelle
Könnte ein bisschen überflüssig sein, aber der sauberste Weg, den ich gefunden habe, baut auf einigen der Antworten hier auf:
Quelle
quelle
Diese Antworten sind sehr hilfreich, aber ich möchte eine weitere Antwort hinzufügen, die Ihnen beim Erstellen einer vollständigen URL helfen kann. Dies kann Ihnen concat Basis helfen
url
,path
,hash
undparameters
.Sie können über npm https://www.npmjs.com/package/build-url herunterladen
Demo:
quelle
Ich weiß, dass dies eine sehr späte Antwort ist, aber sehr gut funktioniert ...
Hinweis: object.entries gibt Schlüssel- und Wertepaare zurück
Hoffe es hilft jemandem.
Viel Spaß beim Codieren ...
quelle
Es ist wahrscheinlich zu spät, um Ihre Frage zu beantworten.
Ich hatte die gleiche Frage und wollte nicht immer wieder Zeichenfolgen anhängen, um eine URL zu erstellen. Also fing ich an, $ .param zu verwenden, wie Techhouse erklärte.
Ich habe auch eine URI.js- Bibliothek gefunden, die die URLs einfach für Sie erstellt. Es gibt mehrere Beispiele, die Ihnen helfen werden: URI.js Dokumentation .
Hier ist einer von ihnen:
quelle
quelle