在jQuery Ajax POST中序列化JSON数据包

pun*_*ish 8 ajax jquery json

我有像socket这样的数据结构

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]
            }
        }
    }
};
Run Code Online (Sandbox Code Playgroud)

我想s在数据库表中存储变量的"a","b","c"和"e"键,以便我可以重新构建它们.我s通过jQuery Ajax POST 发送.这些值将被插入并存储为纯文本("b"除外,它总是一个数字).

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

这是我遇到的问题.在Firebug中我可以看到我的帖子参数......他们真的搞砸了.似乎数据已经在每个元素的层次上被序列化(有点像深度序列化),而我希望像

e={"f":{"g":{"h":[1,0,-2.1,1.43]}},"i":{"j":{"k":[-3.2,3.003,0,0]}}}
Run Code Online (Sandbox Code Playgroud)

更新:相反,我得到以下(我没有转义下面的字符串,所以它更可读)

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
Run Code Online (Sandbox Code Playgroud)

也许我这样做是错误的,所以请随时指导我更好的方式.

Sha*_*oli 9

使用JSON.stringify方法将数据对象序列化为字符串并发布.在服务器端,只需将其存储在数据库中即可.试试这个

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

几乎所有现代浏览器本身都支持JSON.对于本机没有它的浏览器,您可以在http://ajax.cdnjs.com/ajax/libs/json2/20110223/json2.js中包含所需的js.