Kennen Sie eine schnelle und einfache Möglichkeit, ein Javascript-Objekt in ein Objekt zu codieren string
, das ich über eine GET
Anfrage übergeben kann?
Nein jQuery
, keine anderen Frameworks - einfach nur Javascript :)
javascript
query-string
urlencode
Napolux
quelle
quelle
URLSearchParams
jetzt ...Antworten:
so was?
Bearbeiten: Dieser konvertiert auch rekursive Objekte (unter Verwendung der PHP-Array-Notation für die Abfragezeichenfolge).
quelle
jQuery hat eine Funktion dafür.
jQuery.param()
Wenn Sie sie bereits verwenden, können Sie diese verwenden: http://api.jquery.com/jquery.param/Beispiel:
str
enthält jetztwidth=1680&height=1050
quelle
var a = []; a[5] = 'foo'; jQuery.param({ parameters: a });
Ergebnisse in"parameters[]=¶meters[]=¶meters[]=¶meters[]=¶meters[]=¶meters[]=foo"
. Was zwar richtig ist, aber möglicherweise nicht das ist, was Sie erwarten.Einfach verwenden
URLSearchParams
Dies funktioniert in allen aktuellen Browsernquelle
let j = { m: 5, n: { k: 1 } }; new URLSearchParams(j).toString(); // result "m=5&n=%5Bobject+Object%5D"
stringify
die verschachtelten Objekte, bevor Sie könnenURLSearchParams
Bearbeiten: Ich mag diesen Einzeiler, aber ich wette, es wäre eine populärere Antwort, wenn er semantisch mit der akzeptierten Antwort übereinstimmt:
quelle
Object.keys(obj).map(k => k + '=' + encodeURIComponent(obj[k])).join('&')
Object.keys
nur in IE> = 9Object.keys(obj).map(k => `${k}=${encodeURIComponent(obj[k])}`).join('&')
Object.entries(obj).map(e => e.map(ee => encodeURIComponent(ee)).join('=')).join('&');
Hier ist ein Einzeiler in ES6:
quelle
export?actions[]=finance,create,edit
wann es sein sollte,export?actions[]=finance&actions[]=create&actions[]=edit
wie es der schreckliche Standard ist.actions[]
ist PHP-Notation; Django verwendetaction
stattdessen mehrere (kein[]
Suffix); Einige andere ORM / CMS erfordern durch Kommas getrennte Listen usw. "Wenn es sich also nicht um einfache Zeichenfolgen handelt, stellen Sie zunächst sicher, dass Sie wissen, was Ihr Server überhaupt will."Mit Node.js v6.6.3
Referenz: https://nodejs.org/api/querystring.html
quelle
Ich schlage vor, die
URLSearchParams
Schnittstelle zu verwenden:Oder indem Sie das Suchobjekt wie folgt an den Konstruktor übergeben:
quelle
Eine kleine Änderung der von user187291 akzeptierten Lösung:
Das Überprüfen auf hasOwnProperty für das Objekt macht JSLint / JSHint glücklich und verhindert, dass versehentlich Methoden des Objekts oder andere Dinge serialisiert werden, wenn das Objekt alles andere als ein einfaches Wörterbuch ist. Anweisungen auf dieser Seite finden Sie im folgenden Abschnitt: http://javascript.crockford.com/code.html
quelle
Nun, jeder scheint seinen Einzeiler hierher zu bringen, also hier geht meins:
quelle
Müssen Sie beliebige Objekte senden? In diesem Fall ist GET eine schlechte Idee, da die Länge der URLs, die Benutzeragenten und Webserver akzeptieren, begrenzt ist. Mein Vorschlag wäre, ein Array von Name-Wert-Paaren zum Senden aufzubauen und dann eine Abfragezeichenfolge aufzubauen:
quelle
Rails / PHP Style Query Builder
Diese Methode konvertiert ein Javascript-Objekt in ein
URI Query String
. Behandelt auch verschachtelte Arrays und Objekte (inRails
/PHP
Syntax):Anwendungsbeispiel:
quelle
function
, umfalsy
Werte auszuschließen (null, undefiniert, NaN, '') ...Verwenden Sie JSON.
Schauen Sie sich diese Frage an, um Ideen für die Implementierung zu erhalten.
quelle
Hier ist die Coffeescript-Version der akzeptierten Antwort. Dies kann jemandem Zeit sparen.
quelle
Hier ist eine kurze und rekursive Version mit Object.entries . Es verarbeitet beliebig verschachtelte Arrays, jedoch keine verschachtelten Objekte. Außerdem werden leere Elemente entfernt:
Z.B:
quelle
Dieser überspringt null / undefinierte Werte
quelle
In ES7 können Sie dies in einer Zeile schreiben:
quelle
Einzelne Zeile zum Konvertieren von Object in Query String, falls jemand es erneut benötigt
quelle
Ich habe eine einfachere Lösung, die keine Bibliothek von Drittanbietern verwendet und bereits in jedem Browser mit "Object.keys" (auch bekannt als alle modernen Browser + Rand + dh) verwendet werden kann:
In ES5
In ES3
quelle
Wenn Sie ein verschachteltes Objekt rekursiv konvertieren möchten und das Objekt möglicherweise Arrays enthält oder nicht (und die Arrays können Objekte oder Arrays usw. enthalten), wird die Lösung etwas komplexer. Das ist mein Versuch.
Ich habe auch einige Optionen hinzugefügt, mit denen Sie auswählen können, ob Sie für jedes Objektelement in welcher Tiefe im Hauptobjekt aufzeichnen möchten, und ob Sie den Elementen, die aus konvertierten Arrays stammen, eine Bezeichnung hinzufügen möchten.
Idealerweise sollten Sie testen, ob der Parameter thing tatsächlich ein Objekt oder Array empfängt.
quelle
Ergänzung für akzeptierte Lösung, dies funktioniert mit Objekten & Array von Objekten:
Haben Sie auch objName hinzugefügt, wenn Sie Objektparameter wie in asp.net mvc-Aktionsmethoden verwenden.
quelle
Ein bisschen besser aussehen
quelle
Ich habe einen Vergleich von JSON-Stringifizierern durchgeführt und die Ergebnisse sind wie folgt:
Die kürzeste davon ist die URL-Objektnotation .
quelle
ok, es ist ein älterer Beitrag, aber ich stehe vor diesem Problem und habe meine persönliche Lösung gefunden. Vielleicht kann ich jemand anderem helfen.
quelle
Die obigen Antworten funktionieren nicht, wenn Sie viele verschachtelte Objekte haben. Stattdessen können Sie den Funktionsparameter hier auswählen - https://github.com/knowledgecode/jquery-param/blob/master/jquery-param.js Es hat sehr gut für mich funktioniert !
quelle
ES6-LÖSUNG FÜR DIE ABFRAGE VON JAVASCRIPT-OBJEKTEN
quelle
Dies ist eine sofort einsatzbereite Lösung für .NET-Backends. Ich habe die primäre Antwort dieses Threads übernommen und sie an unsere .NET-Anforderungen angepasst.
quelle
Ich habe nur dafür ein Paket geschrieben: object-query-string :)
Unterstützt verschachtelte Objekte, Arrays, benutzerdefinierte Codierungsfunktionen usw. Lightweight & jQuery frei.
kehrt zurück
quelle
Nur ein anderer Weg (kein rekursives Objekt):
quelle
Lesen Sie in der Antwort @ user187291 "isArray" als Parameter hinzu, damit das verschachtelte JSON-Array konvertiert wird.
Um das Ergebnis zu erzielen:
staffId = 00000001 & Detail [0] .identityId = 123456 & Detail [1] .identityId = 654321
quelle
Sie können dies auch mit einfachem JavaScript erreichen .
quelle