У меня есть такой список в html:
<input type="checkbox" name="drive_style" value=1 checked />123<br /> <input type="checkbox" name="drive_style" value=2 />123<br /> <input type="checkbox" name="drive_style" value=3 checked /> 123<br /> <input type="checkbox" name="drive_style" value=4 />123<br /> <input type="checkbox" name="drive_style" value=5 checked />123<br />
Мне нужно отправить значения (1, 3, …) отмеченных ячеек в php-скрипт (я использую ajax с jquery), как массив. Что-то вроде: drive_style [index] .
$.post('post_reply.php', {'drive_style' : $('drive_style')}, function(data){ alert(data); });
В скрипте PHP:
print_r($_POST['drive_style']);
[Объект Object]
upd : Мой новый код:
<input type="checkbox" name="drive_style[]" value=1 checked />123<br /> <input type="checkbox" name="drive_style[]" value=2 />123<br /> <input type="checkbox" name="drive_style[]" value=3 checked />123<br /> <input type="checkbox" name="drive_style[]" value=4 />123<br /> <input type="checkbox" name="drive_style[]" value=5 checked />123<br /> $.post('post_reply.php', {'drive_style':$('input[name=drive_style]').serialize()}, function(data){ alert(data); });
Он оповещает пустую строку.
$(function() { var serial = $('input[name=drive_style]').serialize(); //php -> $('input[name=drive_style[]]').serialize(); alert( serial ); });
это даст вам:
drive_style=1&drive_style=3&drive_style=5
но для работы с php вам также необходимо ввести имя входа следующим образом:
<input type="checkbox" name="drive_style[]" value=1 checked />123<br />
ПРИМЕЧАНИЕ: drive_style[]
что, очевидно, вы получаете:
drive_style[]=1&drive_style[]=3&drive_style[]=5
Как упоминалось выше, вы должны указать свои входы в соответствии с типичным соглашением об именах «массив». PHP автоматически преобразует синтаксис массива в ваши переменные запроса в массив. Таким образом, вы должны drive_style[name]
свои флажки в форме drive_style[name]
. Чтобы отправить эту информацию в JQuery, мы просто сериализуем форму: $('form_id').serialize()
должен сделать трюк. Следующим образом:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-type" content="text/html; charset=utf-8" /> <title>Test</title> <script type="text/javascript" src="http://code.jquery.com/jquery-1.4.2.min.js"></script> <script type="text/javascript" charset="utf-8"> function jquerySubmit() { $.post('http://localhost/test.php', $('#checkboxform').serialize(), function(data) { alert(data); }); } </script> </head> <body> <form id="checkboxform" action="http://localhost/test.php" method="post"> <input type="checkbox" name="drive_style[one]" /> One<br /> <input type="checkbox" name="drive_style[two]" /> Two<br /> <input type="checkbox" name="drive_style[three]" /> Three<br /> <input type="submit" value="Submit Form" /> <input type="button" value="Submit AJAX Request" onclick="jquerySubmit()" /> </form> </body> </html>
И прочитать эту информацию на стороне PHP тоже очень просто:
// http://localhost/test.php <?php echo time(), "\n"; if (isset($_POST['drive_style']) && is_array($_POST['drive_style'])) { echo implode(", ", array_keys($_POST['drive_style'])); echo "\n\n"; } print_r($_POST);
Примечательно, что это соглашение об именах также позволяет вам регулярно отправлять форму.
<input type="checkbox" name="drive_style[key]" value=2 />123<br />
В любом случае вы получите только проверенные входы.
Вы можете получать формы с сериализованными данными с помощью
$('form_selector_here').serialize();
который является тем же самым форматом, который используется для POST и GET (и не проверенных там не будет)
В вашем случае вы используете массив ввода, вы должны добавить [] для ввода своего имени следующим образом:
<input type="checkbox" name="drive_style[]" value=1 checked />123<br /> <input type="checkbox" name="drive_style[]" value=2 />123<br /> ...
после этого вы можете получить проверочный ввод в своем php-коде.