使用rails 2.3.8。
我得到了这个:
[
[0] "0",
[1] {
"name" => "Section",
"contents" => {
"0" => {
"name" => "RENAMED!",
"id" => "1"
}
}
}
]
注意[0]和[1]
但在我的帖子中,我将JSON格式化为:
[ {
"name":"Section",
"contents":[
{
"id":1,
"name":"RENAMED!"
}
]
}, .. more of this type of structure [
那么,为什么rails会添加额外的数组呢?
以下是我发布对象的方式:
$j.ajax({
type: "POST",
url: 'http://url/objects/create/',
dataType: 'text',
async: false,
data: data_obj,
success: function () {
alert("sent");
}
});
更新
data_obj = {
"my_object":{
"name":"hello there, I am JSON!",
"template_id":1,
"variables":{
"hello":"there",
"me":"you"
},
"sections":[
{
"name":"Section",
"contents":[
{
"id":1,
"name":"RENAMED!"
}
]
},
{
"name":"section2",
"contents":[
{
"name":"something",
"body":"nothing"
},
{
"id":2,
"name":"I renamed you",
"variables":{
"hello":"i'm amazing"
}
}
]
}
],
"attachments":[
{
"media_id":1
}
]
}
}
答案 0 :(得分:0)
Rails没有将额外的元素添加到json数组中。这是在浏览器上发生的。
仔细检查你的javascript,找出向数组中添加空元素的“边缘情况”。例如,如何初始化数组。
如果您不相信上述错误的位置,请在ajax调用之前添加断点并检查data_obj
数组。
PS。它应该是一个数组,但你已将其命名为data_obj
。你在某个时候把它当作一个对象吗?您是否将第一个元素设置为索引1? (这将是一个错误。)你应该只push
值到数组上。
ADDED 我认为问题在于你不是以json的形式发送数据。 将数据发送到服务器的默认值是键/值对。
尝试
$j.ajax({
type: "POST",
url: 'http://url/objects/create/',
dataType: 'text', // what you are expecting to be returned from server
async: false,
data: {json: JSON.stringify(data_obj)},
success: function () {
alert("sent");
}
});
见post。您可能还需要设置mime类型。这篇文章展示了如何。
alt结构:
...
data: {my_object: JSON.stringify(data_obj.my_object)},
...