【问题标题】:php ajax insert shows blank response but no errorphp ajax插入显示空白响应但没有错误
【发布时间】:2021-07-09 07:09:09
【问题描述】:

我只是通过 ajax 表单将演示数据插入数据库。当我使用console.log(response); 时,ajax 没有显示错误但显示空白响应。

php代码-

<form role="form" id="signup_form">
                            
            <div class="row">

            <div class="col-lg-6 col-md-6">
            <div class="form-group">
              <label class="required">First Name</label>
                 <div class="input-with-icon">
                   <input type="text" class="form-control" placeholder="Your First Name"
                     name="f_name" id="f_name" required>
                  <i class="ti-user"></i>
                      </div>
              </div>
         </div>
         </div>

           <div class="form-group">
            <button type="submit" id="submit" name="submit"
                class="btn btn-md full-width btn-theme-light-2 rounded">Sign Up</button>
                    </div>

 </form>

ajax 代码-

 <script>
$(document).ready(function() {
    $("#submit").on("click", function(e) {
        e.preventDefault();

        var f_name = $('#f_name').val();
        console.log(f_name);  // <--- but this shows the typed data from the form



        $.ajax({
            url: "homes/php/user-signup.php",
            method: "POST",
            data: {

                "f_name": f_name

            },
            success: function(response) {
                $('#signup_form')[0].reset();
                $('#signup').modal('hide');
                console.log(response); // <--- this shows blank response



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


            }
        });
    });
});
</script>

mysql --

<?php
session_start();
include_once 'conf.php';

if(isset($_POST['submit'])){
            $f_name=$_POST['f_name'];

              $query = "INSERT INTO `user_info`(`first_name`) VALUES (':f_name')";

            $stmt = $dbcon->prepare($query);
            $stmt->bindParam(':f_name',$f_name);
            $stmt->execute();

  
 
    }
 ?>

【问题讨论】:

  • 将脚本标签和 js 代码回显到 Ajax 是没有意义的。只是回显文本。如果浏览器选择这样做,浏览器上的 JavaScript 可以提醒它。 PHP 应该对消息的呈现方式保持中立。
  • @ADyson 我删除了 mysql 文件回显,但问题仍然在于 ajax
  • 我没有说要移除回声……请仔细阅读。显然,如果您删除回声,您将不会在 任何 情况下得到响应。我说只回显您要显示的文本,而不是回显 javascript 代码块。
  • 此外,如果查询由于任何原因失败(假设您没有启用 PDO 错误报告),那么它根本不会回显任何内容(因为您没有编写任何可以执行的代码那)。或者,如果 POST 变量设置不正确,它不会回显任何内容。因此,空响应有很多可能的原因。我假设您在询问之前没有尝试全部调试,那么?
  • 正如下面的答案指出的那样,您正试图在 $_POST 变量中检测一个名为“submit”的变量,但从这里的代码中可以很清楚地看到:data: { "f_name": f_name } 您唯一的变量'正在发送的是一个名为“f_name”的人。所以这会导致你得到一个空响应的情况,因为 POST 变量没有被正确检测到。按照建议将其更改为if(isset($_POST['f_name']))。如果它仍然在那之后不起作用,那么你显然还有另一个问题 - 例如,查询可能失败。

标签: php ajax pdo


【解决方案1】:

您在响应中回显了一个脚本块,这在 AJAX 上下文中毫无意义。

此外,除了纯成功案例之外,您没有回显任何内容,并且您正在检查 $_POST 中的错误变量 - 您的 AJAX 代码仅将“f_name”发送到服务器,没有别的。

您的 SQL 查询中还有一个拼写错误 - :f_name 不应在 SQL 字符串的引号中。

这应该会给你更多反馈:

<?php
session_start();
include_once 'conf.php';

if(isset($_POST['f_name']))
{
    $query = "INSERT INTO `user_info`(`first_name`) VALUES (:f_name)";
    $stmt = $dbcon->prepare($query);
    $stmt->bindParam(':f_name', $_POST['f_name']);
            
    if($stmt->execute())
    {   
       echo "Signup Successful";
    }
    else 
    {
      echo "Error - query did not execute correctly. See error logs for details";
      //N.B. You should put some code here to log the real error to a file
    }
}
else
{
  echo "Missing parameters, please try again";
}
?>

如果它仍然在那之后没有输出任何东西,请进行更多调试 - 检查浏览器的控制台和网络工具,看看请求是否成功。

【讨论】:

  • 我试过你的代码,它说注册成功,但在数据库中它显示“:f_name”而不是输入的值..我也把截图放在问题中
  • 从您的原始代码中发现了一个错字:VALUES (':f_name') 应该是 VALUES (:f_name)。更仔细地研究准备好的陈述的例子!我已经在上面更正了。 php.net/manual/en/pdostatement.bindparam.php 示例。
  • 现在可以了。但是,要插入许多变量,我还应该使用 if(isset($_POST['f_name'])) 吗??
  • 好吧,想一想!问问自己这段代码做了什么,然后你就可以做出决定了。该代码检查 f_name 是否存在。如果这是您唯一的 required 字段,那么继续使用它就可以了。但是,如果您还有其他必填字段,那么您还需要检查这些字段是否存在。
【解决方案2】:

将此$_POST['submit'] 更改为$_POST['f_name']。它会起作用的。你没有在 ajax 请求中发布submit

<?php
session_start();
include_once 'conf.php';

    if(isset($_POST['f_name'])){
            $f_name=$_POST['f_name'];

              $query = "INSERT INTO `user_info`(`first_name`) VALUES (:f_name)";

            $stmt = $dbcon->prepare($query);
            $stmt->bindParam(':f_name',$f_name);
            

            if($stmt->execute()){   
                echo "Signup Successfull";
            }else{
               echo "Insert failed. DB error";
            }
 
    }
 ?>

【讨论】:

  • 不,我试过 f_name 仍然不起作用,顺便说一句,为什么我需要放 $_POST['f_name'] ?因为按钮有 id="submit" name="submit" 。你能详细说明一下吗?
  • submit 将适用于表单提交。表单不会在 ajax 中提交。您将仅在 ajax 数据中传递必填字段。
  • @jerry,试试我更新的代码。它应该可以工作。
  • 从这里删除单引号 :f_name 插入查询。检查我的答案。 @ADyson,谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-08
  • 2016-12-13
  • 2023-03-04
  • 1970-01-01
  • 2017-09-05
  • 1970-01-01
相关资源
最近更新 更多