Я хотел бы POST массив объектов с $.ajax в Zepto или JQuery. Оба имеют одинаковую нечетную ошибку, но я не могу найти то, что я делаю неправильно.
Данные сохраняются на сервере при отправке с использованием тестового клиента, такого как "RestEasy", и я вижу, как запрос обрабатывается в панели net-браузера, поэтому я считаю, что 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)...}) отправляет неповрежденное содержимое, но сервер не любит формат.
Update: Похоже, что JSON.stringify отправляет правильно отформатированный контент. Проблема в том, что серверная сторона очень и очень специфична в отношении структуры объекта, который он хочет. Если я добавлю или удалю какие-либо свойства из объекта, это приведет к сбою всего процесса, а не к свойствам, которые соответствуют. Это неудобно, потому что приятно использовать сервер-отправленное содержимое в качестве модели представления, но модели просмотра меняются. ... Все еще работаем над лучшим решением.