【问题标题】:AJAX call on same page $_POST variable is empty同一页面上的 AJAX 调用 $_POST 变量为空
【发布时间】:2018-12-26 17:52:33
【问题描述】:

我刚刚阅读了很多关于此的主题,但我仍然无法使其发挥作用。将其上传到实时服务器并使用 XAMPP 在 localhost 上尝试,仍然发生相同的情况。

在开发者工具/firebug 上我可以看到结果,在网络/XHR 上也是如此。任何帮助表示赞赏。

我想将单选按钮提交值与 php 变量进行比较(如 index.php 所示)在控制台上它按预期工作,但在我的浏览器窗口上却没有。

html.php

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>

</head>
<body>

          <form name="curso_activo" id="form_preguntas" method="POST" action="" >
              <p> option1 </p>
              <input id="input_1" type="radio" name="html1" value="a">
              <span class="checkmark"></span>


              <p> option2 </p>
              <input id="input_2" type="radio" name="html1" value="b">
              <span class="checkmark"></span>


              <p> option3 </p>
              <input id="input_3" type="radio" name="html1" value="c">
              <span class="checkmark"></span>


              <p> option4 </p>
              <input id="input_4" type="radio" name="html1" value="d">
              <span class="checkmark"></span>


            <div class="respuesta_submit">
            <input type="submit"  id="Respuesta_send" class="button_submit"  value="Enviar" name="Enviar_respuesta">
            </div>

          </form>


  <script src="https://code.jquery.com/jquery-3.1.1.min.js"> </script>
  <script src="ajax.js"></script>

</body>
</html>

ajax.js

$("#form_preguntas").submit(function (e) {
    e.preventDefault();
    var question = $("#input_1").attr('name');
    var answer = $("input[name=" + question + "]:checked").val();

    $.ajax({
        type: 'POST',
        data: {'param': answer},
        success: function (data,) {
            console.log(data);
            alert(question);

        },
        error: function () {
            console.log('error');
        }
    });
});

index.php

    <?php  
require"html.php";

$correct_answer = 'b';

if ($_POST['param'] == $correct_answer) {
    echo "Correct";
}

?>

【问题讨论】:

  • 它不是按预期工作吗? AJAX 不会刷新页面,它只是在后台发送和接收数据,而不需要重新加载页面(除非您告诉 JavaScript)。因此,在您的控制台中,您会看到 AJAX 响应,但在浏览器窗口中,您会一直看到页面,就好像表单没有提交一样。
  • @DecentDabbler 是的,你是对的,但如果我想完成这个 if (isset($_POST['param'])) { echo "PRINT THIS"; } 我不能在同一页上做吗?仅适用于控制台
  • 是的,但是您现在已经编辑了您的问题。最初您想在原始图片中显示“POST PARAM IS SET”(在右侧的控制台部分)。 :) 我只是认为您误解了 AJAX 的工作原理。如果你愿意,我可以在答案中解释。
  • 是的,您可以这样做:或者不使用 AJAX,而只是像平常一样发布表单(这将刷新页面),或者使用 AJAX 但替换初始页面的原始 HTML当 AJAX 返回响应时使用 JavaScript(可能解释起来有点宽泛)。您可以搜索 StackOverflow,了解如何用 JavaScript/AJAX 替换 HTML。已经有很多例子了。
  • @Decent Dabbler 谢谢你的回答,你让我重新思考了 Ajax 是如何工作的。设法使它现在工作。稍后将回答我自己的问题

标签: php html ajax post


【解决方案1】:

您的 javascript 中的一个可能解决方案,检查响应是否符合您的预期,然后告诉用户:

...

success: function (data,) {
  if (data == 'success'){
     //do something here
     $('#someDiv').html('success!');
  }
},

...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-18
    • 1970-01-01
    • 2011-08-17
    • 1970-01-01
    • 1970-01-01
    • 2018-11-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多