【发布时间】:2017-04-06 04:09:30
【问题描述】:
我正在使用 jQuery 向 Node/Express 服务器发送请求,数据是包含数组的 JSON 对象:
var data = {
"name": "James Jamesy",
"children": [
{
"name": "Tiny James",
"age": "4"
},
{
"name": "Little James",
"age": "6"
},
{
"name": "Graham",
"age": "8"
}
]
}
var request = $.ajax({
method: 'PUT',
url: apiPath + 'updateuser',
data: data,
dataType: 'json'
});
请求本身工作正常,但是服务器将数据报告为:
{
name: 'James Jamesy',
'children[0][name]': 'Little James',
'children[0][age]': '4',
'children[1][name]': 'Medium James',
'children[1][age]': '6',
'children[2][name]': 'Graham',
'children[2][age]': '8'
}
现在我发现我可以通过对子数组进行字符串化来获得我想要的结果:
var data = {
"name": "James Jamesy",
"children": JSON.stringify([ ... ])
}
然后在服务器上JSON.parse()ing。
但是我希望有人可以解释为什么数组会按照请求中的样子进行转换,以及我是否应该以不同的方式处理这个问题?在本例中,转换单个数组很好,但接下来我可能会有半复杂的对象要发送到服务器。
提前致谢!
编辑:另外,奇怪的是(?),如果我将 JSON 结果作为传递的 JSON 发送回来,它可以完美地工作:
res.json(JSON.parse(req.body.categories));
浏览器注销该对象,我可以完美地操作它。
【问题讨论】:
-
尝试在 ajax 调用中将
dataType: 'json'更改为contentType: 'json' -
感谢您的回复!不幸的是,这导致服务器只是接收到一个空对象。 (
{}) -
我看到很多 JSON 错误大声笑你在 Express 中使用正文解析器吗?
-
由于
children是一个对象数组,您将看到children[0]引用第一个条目,children[1]引用第二个条目。然后使用方括号表示法添加属性似乎是向每个数组条目添加属性的方式 -children[0][name]至少有点像方括号表示法,尽管它有点令人困惑,因为通常你会看到 @987654333 @ 在这种情况下?因此,发生的事情有点令人困惑。 -
@LuisEstevez 我在其他人的框架中工作,刚刚看了看,它似乎在使用
body-parser。这可能是导致这种行为的原因吗?
标签: javascript node.js ajax express