forge.request.ajax опубликовать данные как json

Я начал использовать trigger.io, чтобы сделать наше мобильное веб-приложение jQuery встроенным. В своем нынешнем виде веб-приложение использует плагин janky.post для создания междоменных публикаций, отправляющих данные в формате json - именно этого ожидает наш API на основе PHP.

Я начал использовать forge.request.ajax вместо этого в родной сборке, которая работает для всех форм в приложении, кроме одной. Похоже, что запрос не представляется как объект в кодировке json, скорее это стандартный массив $_POST. Это не такая большая проблема, как я могу изменить API, чтобы обнаружить это, но поскольку представленные данные являются многомерными, метод, кажется, искажает массив, так что он не структурирован, как ожидалось.

Как мне исправить это поведение, чтобы получить желаемый результат? Могу ли я заставить JSON отправить форму? Если да, есть ли какие-либо недостатки в этом? Не помешает ли это мне в будущем добавить загрузку файлов в эту форму?

Пример:

Чтобы расширить то, что я имею в виду, процесс выглядит следующим образом. При отправке контроллеры форматируют данные формы в json и передают их методу ajax следующим образом:

window.forge.ajax({
    type: 'POST',
    url: 'foo.com/bar',
    data: data,
    dataType: 'json',
    success: function( response ) {
        /* code omitted */
    });
});

Причина этого заключается в том, что некоторые данные в посте не приходят непосредственно из самой формы, а предоставляются дополнительными моделями. Структура data опубликовано следующее:

{
    id: '23',
    date: '2012-08-30 00:00:00',
    name: 'Foo',
    items: [{
        description: 'Bar',
        quantity: '1',
        price: '20'
    }]
}

Но когда он получен в виде массива нашим API на основе PHP, структура выглядит следующим образом:

array(
    'id' => '23'
    'date' => '2012-08-30 00:00:00',
    'name' => 'Foo',
    'items' => array(
        0 => array( 'description' => 'Bar' ),
        1 => array( 'quantity' => '1' ),
        2 => array( 'price' => '20' )
    )
)

Как видите, каждое поле, которое соответствует одному элементу в массиве элементов, было изменено на собственный массив, что неверно, оно должно быть:

 items = array(
     0 => array(
         'description' => 'Bar',
         'quantity' => '1',
         'price' '20'
     )
 )

1 ответ

Решение

Как сказал @Connorhd, это была ошибка в том, как мы кодировали объекты внутри массивов: я исправил это сейчас - будет развернут к концу недели. Приносим извинения за неудобства!

Другие вопросы по тегам