我有一个像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]
}
}
}
};
我想将变量s
的“a”,“b”,“c”和“e”键存储在数据库表中,以便我可以重新构建它们。我通过jQuery Ajax POST发送s
。这些值将被插入并存储为纯文本(“b”除外,它总是一个数字)。
ajax: {
url: uri,
type: "POST",
data: s,
dataType: "json",
success: function(data, status) { .. }
}
这是我遇到的问题。在Firebug中我可以看到我的帖子参数......他们真的搞砸了。似乎数据已经在每个元素的层次上被序列化(有点像深度序列化),而我希望像
这样的东西e={"f":{"g":{"h":[1,0,-2.1,1.43]}},"i":{"j":{"k":[-3.2,3.003,0,0]}}}
更新:相反,我得到以下内容(我已经将其转换为下面的字符串,因此更具可读性)
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
也许我这样做是错误的,所以请随时指导我一个更好的方式。
答案 0 :(得分:9)
使用JSON.stringify
方法将数据对象序列化为字符串并发布。在服务器端,只需将其存储在数据库中即可。试试这个
ajax: {
url: uri,
type: "POST",
data: { data: JSON.stringify(s) },
dataType: "json",
success: function(data, status) { .. }
}
几乎所有现代浏览器本身都支持JSON。对于本机没有它的浏览器,您可以在http://ajax.cdnjs.com/ajax/libs/json2/20110223/json2.js
中包含所需的js