【问题标题】:Post and echo data in php and ajax在 php 和 ajax 中发布和回显数据
【发布时间】:2018-06-13 13:38:22
【问题描述】:

该页面包括 2 个 div 形式的步骤,每个 div 都以 id step1,step2 提及。我希望当我单击第 1 步的按钮(名为 step1button)时,第 2 步中的数据将出现在第 1 步发布但使用 ajax 的数据的基础上。

现在的问题是,当我通过 ajax 发布数据时,Php 代码在此之后运行,但变量值没有出现在页面的 step2 中,但在网络预览中的检查模式下,值会出现。

代码在这里

<!DOCTYPE html>
<html>
<head>
    <script src="plugins/jquery/jquery.min.js"></script>
</head>
<body>
<form method="POST" id="step1">
    <select id="coursename" name="coursename">
        <option>BCA</option>
        <option>BBA</option>
    </select>
    <select id="session" name="session">
        <option>2016</option>
        <option>2017</option>
    </select>
    <button type="button" id="step1button" name="step1button">NEXT</button>
</form>
<div  id="step2">
    <h2>STEP-2</h2>
    <?php
    if (isset($_POST['step1'])) {
        $coursename = $_REQUEST['coursename'];
        $session= $_REQUEST['session'];
        $startdate= $session.'-'.'8';
        $enddate=date('Y-m');
        $storestartdate=strtotime($startdate);
        $storeenddate=strtotime($enddate);
        $monthdiff= 0;
        while (($storestartdate = strtotime('+1 MONTH', $storestartdate)) <= $storeenddate){
            $monthdiff++;
        }
        switch ($monthdiff) {
            case $monthdiff < 5:
            $semester=1;
            break;
            case $monthdiff < 11:
            $semester=2;
            break;
            case $monthdiff < 17:
            $semester=3;
            break;
            case $monthdiff < 23:
            $semester=4;
            break;
            case $monthdiff < 29:
            $semester=5;
            break;
            case $monthdiff < 35:
            $semester=6;
            break;
        }
    }
    ?>
    <div>CLASS <?php echo $coursename.$semester?></div>
    <div>SESSION <?php echo $session?></div>
</div>
    <script>
        $(document).ready(function(){
            $("#step1").show();
            $("#step2").hide();
            $("#step3").hide();
            $("#step1button").click(function(){
                var coursename = $("#coursename").val();
                var session = $("#session").val();
                console.log(coursename);
                console.log(session);
                if(coursename=="" || session==""){
                    $("#alert").html("<div class='alert bg-pink'>Please select coursename and session</div>");
                    $("#coursename,#session").css('border-bottom','2px solid #E91E63');
                }
                else{
                    $.ajax({
                        method:'POST',
                        data:{step1:1,coursename:coursename,session:session},
                        success:function(){
                            $("#step2").show();
                            $("#step1").hide();
                        }
                    });
                }
            });
        });
    </script>
</body>
</html>

【问题讨论】:

  • 欢迎来到 Stack Overflow!您的代码非常冗长且不自给自足。比如common_php_files/as_head.php写的是什么?如果其他人无法重现您的问题,他们可能无法帮助您。所以我建议你采取一些步骤来改进你的问题。 (1) 请务必使用tour 并阅读我们的初学者指南How to ask。 (2) 制作一个具有相同问题并且每个人都可以在他们的机器上运行的代码的较小版本。如果其他人可以运行它,他们可以摆弄直到解决它。
  • 另外,请不要包含代码图片。它不能被复制,也不能被使用屏幕阅读器的人阅读。
  • 另外,您可以使用来自this question的答案调试您的Javascript代码,包括插入断点
  • 好的,我会重现我的问题并再次发送

标签: php ajax post echo


【解决方案1】:

您仅使用 ajax 发布值,但不评估响应。这不是 ajax 的工作原理。

目前每三个步骤的内容都是在第一次渲染页面时执行的。但是由于您只设置了$coursename$step,所以当发送$_POST['step1'] 时,这会导致未定义变量错误。

那么你怎么能解决这个问题呢?有两种选择(也许更多..)

  1. ajax 请求在他的响应中返回 step2/3 的内容,你在 js success-function 中替换它

  2. 您使用虚拟字段预渲染其他步骤,并且 ajax 响应包含 json 数据,可用于用实际内容填充虚拟字段。这也必须在success-function 中完成。

在每种情况下,如果你想使用 ajax,你还必须关心你的 ajax 的响应,请求。

【讨论】:

  • 你能帮我把上面的代码改一下吗
  • 解决您的问题是为这个平台扩展。我只能给你建议,从一个简单的 ajax 教程开始学习基础知识。从那里,您可以继续并提出具体问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-01
  • 1970-01-01
  • 2011-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-14
相关资源
最近更新 更多