AJAX中的数组请求JSON对象数据

时间:2017-04-06 04:09:30

标签: javascript node.js ajax express

我正在使用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()将其放在服务器上。

但是我希望有人可以解释为什么数组在请求中被转换,以及我是否应该以不同的方式处理它?在这种情况下,转换单个数组很好,但是我可能会将半复杂的对象发送到服务器。

提前致谢!

编辑:另外和奇怪地(?),如果我将JSON结果作为传递的JSON发回,它可以完美地运行:

res.json(JSON.parse(req.body.categories));

浏览器会记录该对象,我可以完美地操作它。

1 个答案:

答案 0 :(得分:0)

您没有通过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
});