Ajax调用成功,但无法从$_POST获取单选值


Ajax call successful, but can't get radio values from $_POST

我的网站是完全异步的,大多数html都是在按钮按下时创建和销毁的,每一个都妨碍了导航。

在这一部分,我生成了一个包含"rate 1到10"的单选框数组的表单,使用jQuery.ajax()将其发布,并将其发送到处理程序,在那里它要么回显(目前),要么回显"nothing was selected"。

这是表单

<?php
<form id="surveyForm" action="processSurvey.php" method="post">
    <h3>Alimentos</h3>
    <h4>Sabor</h4>
    <div class="form-group">';
        for ($i = 0; $i <= 10; $i++) {
            echo '
                <span class="lead form-options">' .'</span>
                <label class="radio-inline">
                    <input type="radio" name="sabor" id="saborRadio'. $i .'" value="'. $i .'">'. $i.'
                </label>';
        }
        echo '
    </div>
    <div class="form-group">
        <button class="btn btn-default surveyForm-btn" type="submit">Enviar</button>
    </div>
</form>
?>

这是javascript:

$('body').on('click', '.surveyForm', function(){
        console.log("Clicked on .surveyForm-btn");
        var data = $('#surveyForm').serialize();
        console.log( data );
        $.ajax({
            method: "POST",
            url: "processSurvey.php", 
            data: data, 
            success: function(result){
                console.log("Ajax call to processSurvey success");
                $("#surveyForm").clearForm();
                console.log(result);
                console.log( data );
            } 
        });
        return false;
    });

这个过程php:

<?php
if (isset($_POST['sabor']))   // if ANY of the options was checked
  echo $_POST['sabor'];    // echo the choice
else
  echo "nothing was selected.";
print_r($_POST);
?>

这是点击submit WITH a selected radiobox后的控制台:

Clicked on #surveyForm
[EMPTY LINE]
Ajax call to processSurvey success
nothing was selected.
[EMPTY LINE]

这意味着提交成功,但表单数据为空。我一直试图找到问题从昨天开始,我很确定我传递的数据是错误的,但在谷歌找不到任何东西,我没有尝试过。

编辑:添加了大多数建议,但问题仍然存在。也许html结构是错误的?表单和提交似乎没有联系。

编辑2:我发现了一些非常奇怪的东西,在最后的代码似乎有一个额外的结束标记,像这样

<form id="surveyForm" action="processSurvey.php" method="post"></form>
    <h3>Alimentos</h3>
    <h4>Sabor</h4>

我不知道这是从哪里来的,但肯定是问题所在。

这里有很多注释

1-你会混淆form id='surveyForm'button class='surveyForm',所以最好把它改成button class='surveyForm_btn'

2-我认为你应该序列化表单而不是按钮

var data = $('#surveyForm').serialize(); // not .surveyForm

3- id必须唯一

4- $("#surveyForm").clearForm(); // not .surveyForm

最后检查所有注释

$('body').on('submit', '#surveyForm', function(){});

编辑回答:1-请检查每一步后的一切

<form id="surveyForm" action="processSurvey.php" method="post">
   <h3>Alimentos</h3>
   <h4>Sabor</h4>
   <div class="form-group">
    <button class="btn btn-default surveyForm-btn" type="submit">Enviar</button>
   </div>
</form>
在js

$('body').on('submit', '#surveyForm', function(){
        var data = $(this).serialize();
        $.ajax({
            method: "POST",
            url: "processSurvey.php", 
            data: data, 
            success: function(result){
                console.log(result);
            } 
        });
        return false;
    });
在php中

<?php
echo 'Connected successfully';
?>

这段代码将在控制台中输出连接成功。如果可以,添加for循环并再次检查

试着这样写你的htm:

    <h3>Alimentos</h3>
    <h4>Sabor</h4>
    <div class="form-group">
<?php
        for ($i = 0; $i <= 10; $i++) {
         ?>
                <span class="lead form-options"></span>
                <label class="radio-inline">
                    <input type="radio" name="sabor" id="saborRadio<?=$i ?>" value="<?= $i ?>" /><?= $i?>
                </label>
<?php
        } ?>
    </div>
    <div class="form-group">
        <button class="btn btn-default surveyForm-btn" type="submit">Enviar</button>
    </div>
</form>