Я хотел бы 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"
Так что кажется, что подготовка этих библиотек для сложных почтовых данных отличается от ожидаемой.
Я вижу этот ответ, но я не хочу отправлять данные в качестве параметра запроса, поскольку я загружаю много контента. How do I send an array in an .ajax post using jQuery?
Каков правильный способ отправки нескольких объектов через POST с помощью jQuery/Zepto?
Использование $ .ajax ({... data: JSON.stringify (postData) ...}) отправляет невооруженный контент, но сервер не любит формат.
Обновление: Похоже, что JSON.stringify отправляет правильно отформатированный контент. Проблема в том, что серверная сторона очень и очень специфична в отношении структуры объекта, который он хочет. Если я добавлю или удалю какие-либо свойства из объекта, это приведет к сбою всего процесса, а не к свойствам, которые соответствуют. Это неудобно, потому что приятно использовать сервер-отправленное содержимое в качестве модели представления, но модели просмотра меняются. ... Все еще работает над лучшим решением.
Получаете эти данные с помощью PHP? Если да, вы можете попытаться использовать [.serialize()] (http://api.jquery.com/serialize/), но вам нужно будет добавить '[]' в конце имен переменных и получить их как массивы –