【问题标题】:Ajax call successful, but can't get radio values from $_POSTAjax 调用成功,但无法从 $_POST 获取单选值
【发布时间】:2015-07-29 19:50:52
【问题描述】:

我的网站是完全异步的,大多数 html 都是在按下按钮时创建和销毁的,并且每个 html 都会阻止导航。

在这一部分,我生成了一个带有“rate 1 to 10”的单选框数组的表单,使用 jQuery.ajax() 将其发布并发送到处理它被回显(现在)或回显“未选择任何内容”的处理。”。

这是表格,

<?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);
?>

这是单击提交后的控制台,带有选定的单选框:

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>

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

【问题讨论】:

  • 你应该这样做if(isset($_POST['sabor']))
  • 单选按钮和复选框仅在设置时传递。使用isset()
  • 您正在使用id=saborRadio 创建多个元素。 ID 必须是唯一的。
  • 这只是一个错字。 isset($_POST['radio']) 应该是isset($_POST['sabor']),就像@pbolduc 说的那样。
  • 我更改了 isset($_POST['radio']) 试图修复代码并忘记将其更改回来,问题仍然存在。更改 Id 的类也没有帮助。

标签: javascript php jquery html ajax


【解决方案1】:

这里有很多注释

1- 你会混淆 form id='surveyForm'button class='surveyForm' 所以最好将其更改为按钮 class='surveyForm_btn'

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

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

3- ID 必须是唯一的

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

最后检查所有 cmets

更好用

$('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';
?>

此代码将在控制台中成功输出 Connected .. 如果此工作添加您的 for 循环并再次检查

【讨论】:

  • 感谢您的回答!如果我使用 $('body').on('submit', '#surveyForm', function(){ ... });当我点击时,似乎什么都没有发生。也许表单和提交以某种方式断开连接?
  • @TianRB 我更新了我的基本检查答案..请阅读它
  • 在“提交”上定位#surveyForm 会阻止任何控制台日志,就好像我根本没有点击任何东西一样。使用 .surveyForm-b​​tn 和“点击”的行为如帖子中所述。
  • @Mohamed-Yusef 由于 html 是在加载后创建的,因此使用 $('#surveyForm').on('submit',function(e){ ... 不会将处理程序附加到按钮,这就是我使用 $('body').on('click', '.surveyForm-b​​tn', function(){ ... 的原因。
  • @TianRB 你可以使用 $(document).on('submit', '#surveyForm', function(e){ .... jsfiddle.net/mohamedyousef1980/o30nqt29/2
【解决方案2】:

试着这样写你的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>

【讨论】:

  • 我什至不知道你可以这样拆分循环!谢谢
猜你喜欢
  • 2015-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多