2016-05-11 3 views
0

Это странно, хотя это должно быть очень просто.jQuery Ajax Array неправильно сериализуется

Код:

var recipients = []; 
recipients.push(uuid1); 
recipients.push(uuid2); 

$.ajax({ 
    url: '/api-url/', 
    type: 'POST', 
    data: {'recipient': recipients, 'message': message, 'subject': subject}, 
    dataType: 'json' 
}) ... 

Это поймана в инспекторе Chrome Network:

recipient[]:8b99fa41-0f8f-4882-b14f-dc258a765b15 
recipient[]:add61999-9baa-4096-a92f-fbb144a4a981 
subject:test 
message:testtest 

Это приходит на сервер:

{u'recipient[]': [u'8b99fa41-0f8f-4882-b14f-dc258a765b15', u'add61999-9baa-4096-a92f-fbb144a4a981'], u'message': [u'testtest'], u'subject': [u'test']} 

Как вы можете видеть, мы имеем «получатель» в вызове ajax, два экземпляра «получателя []» в сетевом инспекторе и один «получатель []» на сервере с c orrect data, но неправильное имя параметра.

Любые идеи о том, как это '[]' в 'recipient []' попасть туда?

+0

Это стандарт, чтобы добавить '[]' в пары, если пары представляет собой массив. Некоторые серверные языки/плагины и т. Д. Удаляют это, другие - нет. вы, кажется, работаете с тем, который этого не делает. Вы можете попробовать испортить флаг 'традиционный' jQuery, самостоятельно создать строку параметров или работать с тем, что у вас есть. –

ответ

2

Это то, что JQuery делает для вашего объекта данных:

данные для отправки на сервер. Он преобразуется в строку запроса, если еще не строка. Он добавляется к URL-адресу для запросов GET. См. параметр processData для предотвращения этой автоматической обработки. Объект должен быть парами ключ/значение. Если значением является массив, jQuery сериализует несколько значений с одинаковым ключом на основе значения традиционной настройки (описано ниже).

Чтобы отправить его в JSON необходимо преобразовать его в JSON строку:

... 
type: 'POST', 
data: JSON.stringify({'recipient': recipients, 'message': message, 'subject': subject}), 
+0

Это помогло, но я получил плохую просьбу, пока не добавил: contentType: «application/json; charset = utf-8» и dataType: «json» для настройки ajax. – dnmh

+0

@ dnmh да, лучше быть явным. Без заголовка contentType ваш сервер, похоже, ожидает URL-кодированных параметров. – wero

Смежные вопросы