Я хочу представить форму POST, которая содержит поле textarea и поле ввода (type = "checkbox" с произвольным / переменным числом флажков) на моем сайте через jQuery's .ajax (). PHP получает данные textarea, и ответ ajax корректно отображается пользователю. Однако, похоже, что PHP не получает данные флажка (был ли он проверен или нет). Как я могу заставить это работать? Вот код, который у меня есть:
HTML:
<form method="post" action="myurl.php" id=myForm> <textarea id="myField" type="text" name="myField"></textarea> <input type="checkbox" name="myCheckboxes[]" id="myCheckboxes" value="someValue1" /> <input type="checkbox" name="myCheckboxes[]" id="myCheckboxes" value="someValue2" /> ...(maybe some more checkboxes - dynamically generated as necessary) <input id="submit" type="submit" name="submit" value="Submit" onclick="submitForm()" /> </form>
JQuery:
function submitForm() { $(document).ready(function() { $("form#myForm").submit(function() { var myCheckboxes = new Array(); $("input:checked").each(function() { myCheckboxes.push($(this).val()); }); $.ajax({ type: "POST", url: "myurl.php", dataType: 'html', data: { myField:$("textarea[name=myField]").val(), myCheckboxes:myCheckboxes }, success: function(data){ $('#myResponse').html(data) } }); return false; }); });
Теперь PHP
$myField = htmlspecialchars( $_POST['myField'] ) ); if( isset( $_POST['myCheckboxes'] ) ) { for ( $i=0; $i < count( $_POST['myCheckboxes'] ); $i++ ) { // do some stuff, save to database, etc. } } // create the response $response = 'an HTML response'; $response = stripslashes($response); echo($response);
Все отлично работает: при отправке формы новая запись хранится в моей базе данных, ответ возвращается на веб-страницу, но данные флажка не отправляются. Я хочу знать, какие флажки были проверены. Я читал о .serialize (), JSON и т. Д., Но ни один из них не сработал. Нужно ли сериализовать / JSON в jQuery и PHP? Как? Является ли один метод лучше другого при отправке данных формы с помощью флажков? Я застрял на этом в течение 2 дней. Любая помощь будет принята с благодарностью. Спасибо заранее!
var myCheckboxes = new Array(); $("input:checked").each(function() { data['myCheckboxes[]'].push($(this).val()); });
Вы data['myCheckboxes[]']
флажки в неправильные data['myCheckboxes[]']
массива data['myCheckboxes[]']
вместо myCheckboxes.push
Да, это довольно хорошая работа с jquery.serialize ()
HTML
<form id="myform" class="myform" method="post" name="myform"> <textarea id="myField" type="text" name="myField"></textarea> <input type="checkbox" name="myCheckboxes[]" id="myCheckboxes" value="someValue1" /> <input type="checkbox" name="myCheckboxes[]" id="myCheckboxes" value="someValue2" /> <input id="submit" type="submit" name="submit" value="Submit" onclick="return submitForm()" /> </form> <div id="myResponse"></div>
JQuery
function submitForm() { var form = document.myform; var dataString = $(form).serialize(); $.ajax({ type:'POST', url:'myurl.php', data: dataString, success: function(data){ $('#myResponse').html(data); } }); return false; }
СЕЙЧАС PHP, я экспортирую данные POST
echo var_export($_POST);
Вы можете видеть, что все флажки переданы. Надеюсь, это может помочь вам
Проверь это.
<script type="text/javascript"> function submitForm() { $(document).ready(function() { $("form#myForm").submit(function() { var myCheckboxes = new Array(); $("input:checked").each(function() { myCheckboxes.push($(this).val()); }); $.ajax({ type: "POST", url: "myurl.php", dataType: 'html', data: 'myField='+$("textarea[name=myField]").val()+'&myCheckboxes='+myCheckboxes, success: function(data){ $('#myResponse').html(data) } }); return false; }); }); } </script>
И на myurl.php вы можете использовать print_r($_POST['myCheckboxes']);
$.post("test.php", { 'choices[]': ["Jon", "Susan"] });
Поэтому я просто перебираю флажки и создаю массив. Что-то вроде.
var data = { 'user_ids[]' : []}; $(":checked").each(function() { data['user_ids[]'].push($(this).val()); }); $.post("ajax.php", data);
Код, который у вас есть на данный момент, кажется, все в порядке. Проверьте, что содержит массив checkboxes. Добавьте этот код в начало вашего php-скрипта и посмотрите, передаются ли флажки в ваш скрипт.
echo '<pre>'.print_r($_POST['myCheckboxes'], true).'</pre>'; exit;
Вы также можете попробовать это,
var arr = $('input[name="myCheckboxes[]"]').map(function(){ return $(this).val(); }).get(); console.log(arr);