Отправка массива объектов в качестве данных ajax post?
Моя общая цель - получить все некоторые выпадающие списки на странице и отправить их для обработки файлом php.
Прямо сейчас, как я делаю это в jQuery, вы создаете общий массив расписания, а затем добавляете каждый элемент для обновления в этот массив. Поэтому у меня есть что-то вроде:
var schedule = [];
var data = {
'user_id' : '12',
'day_of_week' : 'Monday',
'when' : 'start',
'time' : '12 AM'
}
schedule.push(data);
var data = {
'user_id' : '13',
'day_of_week' : 'Tuesday',
'when' : 'end',
'time' : '12 AM'
}
schedule.push(data);
// schedule would have two objects in it
Очевидно, что в циклах и т.д.
Итак, у моего массива расписаний в этом случае есть два объекта.
Теперь, можно ли использовать этот массив расписания как данные ajax? Это не работает, если я делаю что-то вроде:
$.ajax({
url: 'http://something.com/ajax',
data: schedule,
type: 'POST'
});
Но если я вместо этого изменил его на schedule[0]
, он будет работать нормально, но только для первого в массиве расписания. Очевидно,
Ответы
Ответ 1
Убедитесь, что вы используете правильную версию jQuery. В более ранних версиях вам нужно было укусить; новые версии используют "интеллектуальную догадку" в переменной data
. Вы можете явно указать jQuery, что вы передаете ему объект javascript с параметром dataType
, или вы можете позволить jQuery понять это.
Documentation
jQuery.ajax()
- http://api.jquery.com/jQuery.ajax/
Ответ 2
Атрибут data
должен быть объектом.
Что вы можете сделать, так это:
$.ajax({
url: 'http://something.com/ajax',
data: {schedule: schedule},
type: 'POST'
});
Итак, если вы получили это, например, на PHP, у вас есть $_POST["schedule"]
. Это точно так же, как и в JavaScript.
О, да, я забыл... также взгляните на .serialize()
и .serializeArray()
!
Ответ 3
Передайте его как JSON:
$.ajax({
url: 'http://something.com/ajax',
data: {schedule: schedule},
type: 'POST',
dataType: 'JSON'
});
Он отправит на сервер закодированную строку JSON, которые могут обрабатывать серверные языки. (в PHP это делается с помощью json_decode()
).