为什么jQuery.getJSON()会扁平化我的JavaScript字典?

1 投票
1 回答
623 浏览
提问于 2025-04-17 13:02

我在用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

撰写回答