Как отправить массив объектов с помощью $.ajax (jQuery или Zepto)

Я хочу POST массив объектов с $.ajax в Zepto или Jquery. Оба показывают одну и ту же странную ошибку, но я не могу найти, что я делаю неправильно.

Данные сохраняются на сервер при отправке с помощью тестового клиента, такого как RestEasy, и я вижу, как запрос искажается в сетевой панели браузера, поэтому я считаю, что виноват JS.

Если я отправлю массив объектов в качестве свойства данных POST, они будут отправлены неправильно.

Объект данных:

var postData = [
    { "id":"1", "name":"bob"}
  , { "id":"2", "name":"jonas"}
  ]

Запрос:

$.ajax({
  url: _saveDeviceUrl
, type: 'POST'
, contentType: 'application/json'
, dataType: 'json'
, data: postData
, success: _madeSave.bind(this)
//, processData: false //Doesn't help
});

Тело запроса, как оно отображается в браузере:

"bob=undefined&jonas=undefined"

Это можно увидеть более непосредственно, используя метод $.param, который jQuery и Zepto используют для подготовки данных POST.

$.param(
  [
    { "id":"1", "name":"bob"}
  , { "id":"2", "name":"jonas"}
  ]
)
// Output: "bob=undefined&jonas=undefined"

Таким образом, кажется, что подготовка, которую эти библиотеки выполняют для сложных пост-данных, отличается от того, что я ожидаю.

Я вижу этот ответ, но я не хочу отправлять данные в качестве параметра запроса, так как я публикую много контента. Как отправить массив в сообщении .ajax с помощью jQuery?

Как правильно отправить несколько объектов по POST с помощью jQuery/Zepto?

Использование $.ajax({... data: JSON.stringify(postData) ...}) отправляет неискаженное содержимое, но серверу не нравится такой формат.

Обновление: Похоже, JSON.stringify отправляет правильно отформатированный контент. Проблема в том, что серверная сторона очень и очень специфична в отношении структуры объекта, который ей нужен.Если я добавлю или удалю какие-либо свойства объекта, произойдет сбой всего процесса, а не использование совпадающих свойств. Это неудобно, потому что приятно использовать отправленный сервером контент в качестве модели представления, но модели представления изменяются. ...Все еще работаю над лучшим решением.

44
задан Community 23 May 2017 в 11:54
поделиться