2016-11-30 45 views
0

我不知道为什么会发生这种情况,但可以使用一些输入。为什么node.js将数组中的字符串值附加到数组中的另一个对象为true?

我有一个对象通过jquery ajax附加到POST请求的主体。目的是类似这样的例子:

var dogData = {breeds: [{Dog: "Golden Retriever"}, "Rottweiler"]} 

Ajax请求是这样的:

$.ajax({ 
     type: "POST", 
     url: "api/dog", 
     data: dogData, 
     }) 

使用快递+ bodyparser我的服务器:

app.post('/dogs', function(req, res){console.log(req.body)}) 

当我CONSOLE.LOG对象:

{breeds: [{Dog: "Golden Retriever", Rottweiler: true}]} 

我想要th这是我最初从服务器返回的同一个对象。有人可以解释为什么字符串连同布尔值一起附加到前一个对象吗?

+3

你真的应该发布真实的代码。从你发布的帖子开始,任何人都可以说的是“发生了一些奇怪的事情,所以你的代码中可能存在一个bug。” – Pointy

+0

我发布了一些更多,但关于如何提出请求。我使用了与测试变量相同的对象。只是好奇为什么会发生这种情况,以及如何在不改变数据结构的情况下防止这种情况发生。 – fm722

+0

jQuery将假定您希望它将ajax请求中'data'属性的值序列化,就好像它是表单字段属性的名称/值集合一样。如果你想发布一个原始的JSON字符串,你必须做不同的事情;究竟如何取决于你的服务器的期望。 – Pointy

回答

2

使用jsonparser您的服务器上,使您的文章使用JSON内容

$.ajax({ 
     type: "POST", 
     url: "api/dog", 
     data: JSON.stringify(dogData), 
     contentType: 'application/json; charset=utf-8' 
     }) 

身体解析器解析urlencoded的表单数据。

当你把你的数据将被转换为:

breeds[0][Dog]=Golden+Retriever&breeds[Rottweiler]; 

当bodyparser解析它,因为没有对罗威没有价值,它的存在,它会被转换成“真”

相关问题