Отправить несколько данных флажка на PHP через jQuery ajax ()

Я хочу представить форму 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);