Javascript AJAX中的数组请求JSON对象数据
我正在使用jQuery向Node/Express服务器发送请求,jQuery的数据是一个包含数组的JSON对象:Javascript AJAX中的数组请求JSON对象数据,javascript,node.js,ajax,express,Javascript,Node.js,Ajax,Express,我正在使用jQuery向Node/Express服务器发送请求,jQuery的数据是一个包含数组的JSON对象: var data = { "name": "James Jamesy", "children": [ { "name": "Tiny James", "age": "4" }, { "name": "Little James",
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()
然而,我希望有人能解释为什么数组在请求中被转换,以及我是否应该以不同的方式处理它?在本例中,转换单个数组是可以的,但接下来可能会有半复杂的对象发送到服务器
提前谢谢
编辑:另外,奇怪的是(?),如果我将JSON结果作为已传递的JSON发送回来,它将完美工作:
res.json(JSON.parse(req.body.categories));
浏览器注销对象,我可以很好地处理它。您没有通过ajax传递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: JSON.stringify(data),
contentType: 'application/json', // for request
dataType: 'json' // for response
});
尝试将ajax调用中的dataType:'json'
更改为contentType:'json'
。感谢您的响应!不幸的是,这导致服务器只接收一个空对象。({}
)我看到很多JSON错误lol你在Express中使用body parser吗?因为children
是一个对象数组,你会看到children[0]
引用第一个条目,看到children[1]
引用第二个条目。然后使用括号表示法添加属性看起来就像是将属性添加到每个数组项中一样-children[0][name]
至少看起来有点像括号表示法,尽管有点混乱,因为在这种情况下通常会看到children[0][name]
?所以现在发生的事情有点让人困惑。@LuisEstevez我在其他人的框架中工作,刚看了一下,它确实在使用主体解析器
。这可能是导致这种行为的原因吗?