Montag, Januar 27, 2020

serialisieren der JSON-Daten-Paket in einer jQuery Ajax POST

Habe ich eine Datenstruktur, die wie bei sockel

var s = {
    "a": "foo",
    "b": 5,
    "c": {"d": "a long string"},
    "e": {
        "f": {
            "g": {
                "h": [1, 0, -2.1, 1.43]
            }
        },
        "i": {
            "j": {
                "k": [-3.2, 3.003, 0, 0]
            }
        }
    }
};

Will ich bewahren Sie das „a“, „b“, „c“ und „e“ Tasten der variable s in einer Datenbank-Tabelle, so kann ich rekonstruieren Sie wieder zurück. Ich sende s über eine jQuery Ajax POST. Die Werte werden eingefügt und gespeichert als nur text (außer „b“ ist immer eine Zahl).

ajax: {
    url: uri,
    type: "POST",
    data: s,
    dataType: "json",
    success: function(data, status) { .. }
}

Hier ist das problem, ich bin der Begegnung. Im Firebug kann ich sehen, wie meine post-Parameter… Sie sind wirklich Durcheinander. Scheint, wie die Daten serialisiert wurden auf der Ebene der einzelnen Elemente (ein bisschen wie eine Tiefe Serialisierung), während ich hoffte auf so etwas wie

e={"f":{"g":{"h":[1,0,-2.1,1.43]}},"i":{"j":{"k":[-3.2,3.003,0,0]}}}

Update: Anstelle, ich erhalte die folgende (ich habe unescaped die Zeichenfolge unten, so ist es besser lesbar)

a=foo&b=5&c[d]=a long string&e[f][g][h][]=1&e[f][g][h][]=0&e[f][g][h][]=-2.1&e[f][g][h][]=1.43

Bin ich vielleicht tun dies der falsche Weg, so fühlen sich frei, um mich auf einen besseren Weg.

InformationsquelleAutor punkish | 2012-01-26

1 Kommentar

  1. 9

    Verwenden JSON.stringify Methode zum serialisieren der Daten-Objekt in eine Zeichenfolge und poste es. Auf der server-Seite nur speichern Sie diese wie in deiner DB. Versuchen Sie, diese

    ajax: {
        url: uri,
        type: "POST",
        data: { data: JSON.stringify(s) },
        dataType: "json",
        success: function(data, status) { .. }
    }

    Fast alle modernen Browser unterstützen JSON nativ. Für die Browser, die haben es nicht nativ können Sie auch die benötigten js aus http://ajax.cdnjs.com/ajax/libs/json2/20110223/json2.js

    • +1, vor allem für die Anbindung an JSON2.js für alte Browser.
    • Ich bin mir ziemlich sicher, dass Sie gehen, um Doppel-encode-Daten-Objekt, da Sie den Aufruf stringify auf s
    • Wenn die Daten Wert ist ein string, jQuery nur nicht URI-Codierung, um es sicher genug ist, um die übertragung über HTTP. Ich glaube nicht, es wird so Kodieren Sie die Zeichenfolge.
    • Ich habe ein wenig mehr Erklärung… siehe update im OP. JSON.stringify ist nicht wirklich mich immer, was ich will. Erneut, es ist möglich, es gibt einen besseren Weg, das zu erreichen, was ich will… so fühlen sich frei zu schlagen.
    • Machen Verwendung von JSON.stringify es wird Ihnen eine serialize-string einfach zur post. Wenn Sie geben dem Objekt, wie es ist von jQuery erstellen Schlüssel/Wert-paar für jede Eigenschaft auf der ersten Ebene drin, die ist, was Sie sehen, in der firebug.
    • danke Euch allen… das folgende hat den trick var str = ""; for (var i in s) {str += i + "=" + (typeof(s[i]) == "object" ? JSON.stringify(s[i]) : S[i]) + "&";}
    • Wenn diese Ihnen geholfen, markieren Sie diese als Antwort.
    • Ersparte mir eine Menge Kopfschmerzen=)

Kostenlose Online-Tests