Как я могу отправить массив объекта javascript в скрипт php через $.post?
У меня есть таблица данных на моей странице. Столбцы "начало", "конец", "комментарий" и "параметры". В столбце параметров есть кнопка для удаления строки и кнопка, которая делает строку таблицы доступной для редактирования. Это позволяет изменять значения "начало", "конец" и "комментарий". Повторное нажатие завершает процесс редактирования. Наконец, есть способ добавить еще одну строку в таблицу. Все это работает как ожидалось.
Я хочу добавить кнопку внизу, которая создает массив из данных в таблице, который выглядит следующим образом (представлен как JSON исключительно для простоты отображения в SO: не требуется):
[
{
"start" :"2009/08/01",
"end" :"2009/08/08",
"comment" :"an example date.",
},
{
"start" :"2009/07/01",
"end" :"2009/07/08",
"comment" :"another example date, a month earlier.",
},
{
"start" :"2000/07/01",
"end" :"2000/07/08",
"comment" :"another example date, a year earlier. You get the idea.",
}
]
У меня не должно быть особых проблем со сборкой массива, но как только я это сделаю, я могу опубликовать его в бэкэнд-скрипте php (который затем будет использовать put_csv()
записать данные в файл)? В идеале это было бы доступно на стороне сервера в формате массива, чтобы разрешить проверку.
Я счастлив использовать jquery, если это необходимо.
2 ответа
То, как вы закончите это на сервере, зависит от того, что вы хотите архивировать. Если вы хотите загрузить новую страницу, которая будет обрабатывать данные, вы можете использовать обычную форму со скрытыми вводами. В качестве альтернативы, если вы хотите обрабатывать в фоновом режиме через AJAX, используйте jQuery.ajax
как сказал CRasco. В любом случае, вам нужно преобразовать структурированный массив в простой список ключ / значение.
Один из вариантов - сгенерировать документ JSON (я не думаю, что jQuery предоставляет функцию для этого, но вы можете легко что-то найти) и использовать одно поле с сериализованным документом. Тогда на стороне сервера вы бы использовали json_decode
чтобы вернуть массив. Если вы используете метод AJAX, опция данных в jQuery.ajax
вызов будет содержать:
{
'data': '[{"start":"2009/08/01","end":"2009/08/08","comment":"an example date."},...'
}
Лучшим подходом было бы преобразовать его в список полей в формате, понятном PHP. Это означает, что вы не должны делать ничего особенного, и $_POST['data']
будет содержать массив. Например:
{
'data[0][start]': '2009/08/01',
'data[0][end]': '2009/08/08',
'data[0][comment]': 'an example date.',
'data[1][start]': '2009/07/01',
'data[1][end]': '2009/07/08',
'data[1][comment]': 'another example date, a month earlier.',
...
}
Если вы используете метод формы, вам нужно сгенерировать поля ввода, такие как:
<input type="hidden" name="data[0][start]" value="2009/08/01" />
Я бы определенно использовал jQuery. Вот страница для функции $.post().
http://docs.jquery.com/Ajax/jQuery.post
Одно предупреждение: $.post() - это оболочка для функции $.ajax(), которая упрощена и исключает вашу возможность устанавливать обратные вызовы для чего угодно, кроме успешного сообщения. Для важных транзакций через AJAX я бы использовал это:
http://docs.jquery.com/Ajax/jQuery.ajax
Примером является:
$.ajax({
url: "script.php",
global: false,
type: "POST",
data: ({id : this.getAttribute('id')}),
dataType: "html",
success: function(msg){
alert(msg);
}
});