Отправить несколько данных флажка в PHP через jQuery ajax () - PullRequest
24 голосов
/ 29 февраля 2012

Я хочу отправить форму POST, которая содержит поле textarea и поля ввода (type = "checkbox" с произвольным / переменным количеством флажков) на моем веб-сайте с помощью jauery'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 дней. Любая помощь будет принята с благодарностью. Спасибо заранее!

Ответы [ 6 ]

30 голосов
/ 29 февраля 2012

Да, это прекрасно работает с 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);

Вы видите, что все значения флажков отправлены. Я надеюсь, что это может помочь вам

22 голосов
/ 29 февраля 2012
var myCheckboxes = new Array();
$("input:checked").each(function() {
   data['myCheckboxes[]'].push($(this).val());
});

Вы устанавливаете флажки на неправильный массив data['myCheckboxes[]'] вместо myCheckboxes.push

4 голосов
/ 29 февраля 2012

Проверьте это.

<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']);

1 голос
/ 10 апреля 2014
    $.post("test.php", { 'choices[]': ["Jon", "Susan"] });

Так что я бы просто перебрал флажки и собрал массив. Нечто подобное.

       var data = { 'user_ids[]' : []};
        $(":checked").each(function() {
       data['user_ids[]'].push($(this).val());
       });
        $.post("ajax.php", data);
0 голосов
/ 20 марта 2016

Вы также можете попробовать это,

var arr = $('input[name="myCheckboxes[]"]').map(function(){
  return $(this).val();
}).get();

console.log(arr);
0 голосов
/ 29 февраля 2012

Код, который у вас есть на данный момент, кажется, все в порядке.Проверьте, что массив checkboxes содержит, используя это.Добавьте этот код в начало вашего php-скрипта и посмотрите, передаются ли флажки вашему скрипту.

<code>echo '<pre>'.print_r($_POST['myCheckboxes'], true).'
';выход;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...