为什么jQuery.getJSON()会扁平化我的JavaScript字典?
我在用jQuery的getJSON()方法把一个javascript字典传到我的服务器时遇到了大问题。我在js中声明了这个字典:
data = {'a': 1, b:{'c':2, 'd':3}};
当我调用:
jQuery.getJSON("myurl", data, callback)
服务器收到的字典是这样的:
{'a':1, 'b[c]':2, 'b[d]':3}.
注意,里面的子字典被压扁了,'b'这个键和子键'c'、'd'合并在了一起。这对于数据层级很深的情况来说,真是让人头疼。
我承认我不太确定这是javascript和JSON序列化的问题,还是和接收数据的Python和Pyramid这个网络框架有关。我试过在发送数据之前先把它转成字符串,也用Python的json库来反序列化,但总是出错。
有没有人能帮帮我?
1 个回答
3
数据发送的方式是正确的。
数据字段是用来通过HTTP发送数据的。如果你通过HTTP的GET方式发送数据,你会在查询字符串中看到这些参数。
myurl?a=1&b%5Bc%5D=2&b%5Bd%5D=3
未转义的URL:
myurl?a=1&b[c]=2&b[d]=3
如果你想把JSON格式的数据发送到服务器,你需要先把它转换成字符串,使用 JSON.stringify()。为了支持IE8之前的版本,你需要引入一个JSON库。
你需要把转换后的字符串赋值给一个变量。
jQuery.getJSON("myurl",{data: JSON.stringify(data)}, callback);
这个变量会被传递到你的服务器,变量名叫 data
。