无法使用包含对象数组的属性发送Object

时间:2016-11-30 18:38:54

标签: javascript jquery json ajax node.js

我正在尝试发送一个看起来像这样的对象

var postBody = {
        id: userID,
        objectID: [0, 1],
        objects: [
            {id: 0, x: 0.33930041152263374, y: 0.08145246913580247, width: 0.0823045267489712, height: 0.30864197530864196},
            {id: 1, x: 0.5277777777777778, y: 0.08453888888888889, width: 0.0823045267489712, height: 0.30864197530864196}
        ]
    };

这是ajax调用

$.ajax({
        type: 'POST',
        url: url,
        data: postBody,
        dataType: 'JSONP',
        success: function(data) {
            console.log(data);
        },
        error: function(err) {
            console.log(err);
        }
    });

这就是它在服务器上的样子

 { id: '583f137fc338b517ec467643',
'objectID[]': [ '0', '1' ],
'objects[0][id]': '0',
'objects[0][x]': '0.33930041152263374',
'objects[0][y]': '0.08145246913580247',
'objects[0][width]': '0.0823045267489712',
'objects[0][height]': '0.30864197530864196',
'objects[1][id]': '1',
'objects[1][x]': '0.5277777777777778',
'objects[1][y]': '0.08453888888888889',
'objects[1][width]': '0.0823045267489712',
'objects[1][height]': '0.30864197530864196' }

如果我放数据:JSON.stringify(postBody)这就是我得到的

{ '{"id":"583f137fc338b517ec467643","objectID":[0,1],"objects":[{"id":0,"x":0.5,"y":0.5,"width":0.1,"height":0.1},{"id":1,"x":0.5401234567901234,"y":0.1833043209876543,"width":0.0823045267489712,"height":0.30864197530864196}]}': '' }

它有效!但后来我不能JSON.parse()它 这是我尝试时得到的。

TypeError: Cannot convert object to primitive value

我正在对后端数据做的就是这个

console.log(JSON.parse(req.body)); // in the first example it was the same thing but only without JSON.parse()

任何人都知道为什么会发生这种情况? 即使你有一个关于我可以尝试随意发布的建议,否则我将不得不编写一个函数来解析这些badass输入lol。

1 个答案:

答案 0 :(得分:1)

所有解析/字符串化都由Node处理,所以不要担心,只需按原样传递对象,然后就可以在req.body中访问它的属性。

客户:

$.ajax({
            type: 'POST',
            url: url,
            data: postBody,
            dataType: 'json',
            success: function(data) {
                console.log(data);
            },
            error: function(err) {
                console.log(err);
            }
        });

服务器:

 console.log(req.body);  //should give you [Object object]

然后您可以使用:res.status(200).json(req.body));

将其发回

并在你的ajax回调中阅读:

success: function(data) {
    console.log(data);
},