Frage

Eine HTTP-GET-Abfrage-String ist eine geordnete Folge von Schlüssel / Wert-Paare:

?spam=eggs&spam=ham&foo=bar

Ist mit bestimmten Semantik, das entspricht den folgenden Wörterbuch:

{'spam': ['eggs', 'ham'], 'foo': bar}

Dies geschieht für boolean Eigenschaften dieser Seite gut funktionieren angefordert werden:

?expand=1&expand=2&highlight=7&highlight=9
{'expand': [1, 2], 'highlight': [7, 9]}

Wenn Sie das Element erweitert mit der ID 2 stoppen wollen, ist es gerade aus dem expand Wert Pop und die Query-String-urlencode wieder. wenn Sie eine modale Eigenschaft (mit 3+ Auswahl) haben jedoch, die Sie wirklich wollen, eine Struktur repräsentieren etwa so:

{'highlight_mode': {7: 'blue', 9: 'yellow'}}

Sind die Werte zu den entsprechenden ID-Tasten sind Teil einer bekannten Aufzählung. Was ist der beste Weg, dies in einen Query-String zu kodieren? Ich denke, eine Folge von zwei-Tupel mit etwa so:

?highlight_mode=(7,blue)&highlight_mode=(9,yellow)

Edit: Es wäre auch schön zu wissen, alle Namen , dass Mitarbeiter mit den Konventionen. Ich weiß, dass es nicht sein kann, aber es ist schön, dass man über etwas Bestimmtes mit einem Namen anstelle von Beispielen sprechen. Dank!

War es hilfreich?

Lösung

Der üblicher Weg ist es, wie dies zu tun:

highlight_mode[7]=blue&highlight_mode[9]=yellow

AFAIR, ganz wenige serverseitige Sprachen unterstützen eigentlich diese aus dem Kasten heraus und wird ein schönes Wörterbuch für diese Werte erzeugen.

Andere Tipps

Ich habe auch Leute JSON-kodieren die verschachtelte Wörterbuch, dann weiter kodieren sie mit BASE64 (oder so ähnlich) zu sehen ist, dann die ganze passieren Chaos als ein einzelnen Abfrage-String-Parameter führen.

Pretty hässlich.

Auf der anderen Seite, wenn Sie mit der Verwendung von POST weg erhalten können, JSON ist ein wirklich guter Weg, um diese Art von Informationen zu übergeben hin und her.

In vielen Web-Frameworks es codiert anders aus, was Sie sagen.

{'foo': [1], 'bar': [2, 3], 'fred': 4}

wäre:

?foo[]=1&bar[]=2&bar[]=3&fred=4

Der Grund Array Antworten von einfachen Antworten unterschiedlich sein sollen, ist so die Decodierung Schicht automatisch den weniger häufig foo Fall sagen kann (Array, das geschieht nur ein einziges Element haben) aus sehr häufig fred Fall (einzelnes Element).

Diese Schreibweise kann hochgerechnet werden:

?highlight_mode[7]=blue&highlight_mode[9]=yellow

Wenn Sie einen Hash, nicht nur ein Array.

Ich denke, das ist ziemlich viel, was Rails und die meisten Frameworks, die von Rails kopieren tun.

Leere Arrays leer Hashes, und das Fehlen von skalaren Wert identisch aussehen in dieser Codierung, aber es gibt nicht viel können Sie dagegen tun können.

Das [] scheint nur ein paar Flamewars zu verursachen. Einige sehen es als unnötig, da der Browser, Transportschicht und Query-String-Encoder egal. Das einzige, was kümmert sich automatisch Abfrage-String-Decoder. Ich unterstütze den Rails Weg [] zu verwenden. Die Alternative wäre, verschiedene Methoden, die für einen skalar Extrahieren und ein Array aus Abfragezeichenfolgeflag extrahieren, da es keine automatischen Art und Weise ist zu sagen, wann Programm will [1], wenn es 4 will.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top