У меня есть форма, которая собирает данные со всех ее входов в виде многомерного массива и использует стандартную функцию отправки формы, это загружает целевую страницу, а скрипт PHP отлично считывает многомерный массив и приводит к желаемый выход.jQuery POST многомерный массив формы
<form action="target.php" method="post">
<?php foreach ($days as $day) { ?>
<select name="roster[<?php echo $day->date() ?>][1]"> ... </select>
<select name="roster[<?php echo $day->date() ?>][2]"> ... </select>
<select name="roster[<?php echo $day->date() ?>][3]"> ... </select>
<?php } ?>
<input type="submit">
</form>
В файле целевой PHP, я просто забрать это на $_REQUEST['roster']
, то я могу только работать с ним как обычный PHP массив. Просто, как может быть.
Однако, я хотел бы преобразовать это в запрос AJAX с помощью jQuery. Я прочитал несколько предложений, которые говорят, чтобы получить данные формы, используя $('form').serialize()
или $('form').serializeArray()
, но это не верно считывает массив и производит какой-то странный вывод.
В настоящее время я играю с другими предложениями, которые по существу включают в себя перемещение DOM и создание нового массива или объекта javascript из данных элемента, а затем отправку его через $.ajax()
, но все это кажется излишне сложным.
Мой вопрос: есть ли простой способ отправки данных массива этой формы через jQuery и $.ajax()
?
По всей видимости есть, и это будет кровоточить очевидным, но на данный момент я не вижу его!
EDIT:
Вот print_r
выход $_REQUEST['roster']
от стандартной формы представить функцию: (prettied с <pre>
форматирования для удобства чтения):
Array
(
[2013-04-06] => Array
(
[1] => 8
[2] => 3
[3] => 7
)
[2013-04-13] => Array
(
[1] => 4
[2] => 3
[3] => 7
)
[2013-04-20] => Array
(
[1] => 8
[2] => 17
[3] => 7
)
[2013-04-27] => Array
(
[1] => 4
[2] => 3
[3] => 7
)
)
А вот выход для $('form').serialize()
:
roster%5B2013-04-06%5D%5B1%5D=8&roster%5B2013-04-06%5D%5B2%5D=3&roster%5B2013-04-06%5D%5B3%5D=7&roster%5B2013-04-13%5D%5B1%5D=0&roster%5B2013-04-13%5D%5B2%5D=0&roster%5B2013-04-13%5D%5B3%5D=0&roster%5B2013-04-20%5D%5B1%5D=0&roster%5B2013-04-20%5D%5B2%5D=0&roster%5B2013-04-20%5D%5B3%5D=0&roster%5B2013-04-27%5D%5B1%5D=0&roster%5B2013-04-27%5D%5B2%5D=0&roster%5B2013-04-27%5D%5B3%5D=0
И выход для $('form').serializeArray()
:
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Что, если я затем извлечь данные из каждой [object Object]
с помощью
$.each(data, function(index1, value1) {
$.each(value1, function(index2, value2) {
$('body').append('index1: '+index1+' value1: '+value1+' { index2: '+index2+' value2: '+value2+' }');
});
});
я получаю:
index1: 0 value1: [object Object] { index2: name value2: roster[2013-04-06][1] }
index1: 0 value1: [object Object] { index2: value value2: 8 }
index1: 1 value1: [object Object] { index2: name value2: roster[2013-04-06][2] }
index1: 1 value1: [object Object] { index2: value value2: 3 }
... и т.д .. для каждого входа.
Очевидно, что из вывода $.each
я должен иметь доступ к данным как object.name и object.value, а затем форматировать все в новый массив, чтобы заставить его работать с моим PHP-скриптом, но так ли это сделай это? или есть лучший способ?
У вас есть код сгенерированный HTML-код? Дайте нам знать вывод 'var_dump ($ _ POST)'. –
Это 'var_dump' из стандартной функции отправки, которая работает: array (1) {[" roster "] => array (4) {[" 2013-04-06 "] => array (3) {[1 ] => строка (1) "8" [2] => строка (1) "3" [3] => строка (1) "7"} ["2013-04-13"] => массив (3) {[1] => строка (1) "0" [2] => строка (1) "0" [3] => строка (1) "0"} ["2013-04-20"] => массив (3) {[1] => строка (1) "0" [2] => строка (1) "0" [3] => строка (1) "0"} ["2013-04-27"] => array (3) {[1] => строка (1) "0" [2] => строка (1) "0" [3] => строка (1) "0"}}} ... или Вы хотели видеть вывод '.serializeArray()'? – beltanegrey
Обновите его в своем вопросе. –