Неправильно размещен формат JSON для / создания в рельсах - PullRequest
0 голосов
/ 27 февраля 2012

с использованием рельсов 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 [

Итак, почему рельсы добавляют дополнительный массив?

Вот как я размещаю объект:

$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
        }
      ]
    }
}

1 Ответ

0 голосов
/ 27 февраля 2012

Rails не добавляет дополнительный элемент в массив json.Это происходит в браузере.

Внимательно проверьте ваш javascript на наличие «крайнего случая» добавления пустого элемента в массив.Например, как вы инициализируете массив.

Если вышеизложенное не убедило вас в том, где находится ошибка, добавьте точку останова перед вызовом ajax и проверьте массив data_obj.

пс.это должен быть массив, но вы назвали его data_obj.Вы рассматриваете это как объект в некоторый момент?Вы устанавливаете первый элемент на индекс 1 ?(Это было бы ошибкой.) Вы должны только push значения для массива.

ДОБАВЛЕНО Я думаю, проблема в том, что вы не отправляете данные как 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)},
 ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...