You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL插入成功后Ajax无法接收返回信息的问题求助

问题分析与解决方案

核心问题1:表单提交未阻止默认行为

表单触发submit事件后,浏览器会执行默认的页面刷新提交,直接中断Ajax请求,导致无法获取后端返回结果。必须在事件处理中阻止这一默认行为。

核心问题2:前后端数据格式不匹配

前端尝试读取data.message,但后端仅输出"200"或"500"纯字符串,并非JSON对象;同时后端未设置正确响应头,前端也未指定预期数据类型,导致jQuery解析出错。


修复步骤

1. 前端代码修改

<script>
  $(document).ready(function () {
    $('#data_form').on("submit", function(e) {
      e.preventDefault(); // 阻止表单默认刷新提交
      var formData = $('#data_form').serialize();
      if (!$.active) {
        $.ajax({
          type: 'POST',
          url: '../../../controller/add_user.php',
          data: formData,
          cache: false,
          dataType: 'json', // 指定预期返回JSON格式
          success: function (data) {
            console.log(data.message);
          },
          error: function(xhr, status, error) {
            const errData = xhr.responseJSON || {message: error};
            console.log(errData.message);
          }
        });
      }
    });
  });
</script>

2. 后端PHP代码修改

统一返回JSON格式,设置响应头,同时修复SQL注入风险、替换不安全的extract用法:

<?php
include_once('../model/database_11.php');
$db_obj = new Dbconnection();
$dbconn = $db_obj->ConnectToDB();

class admin
{
    public $dbconn;
    public $name;
    public $account_type;
    public $telephone = null;
    public $mobile;
    public $address;
    public $pincode;
    public $email_user;
    public $gender;
    public $dob;
    public $status;
    public $username;
    public $password;

    public function __construct($dbconn, $name, $account_type, $telephone, $mobile, $address, $pincode, $email_user, $gender, $dob, $status, $username, $password)
    {
        $this->dbconn = $dbconn;
        $this->name = $name;
        $this->account_type = $account_type;
        $this->telephone = $telephone;
        $this->mobile = $mobile;
        $this->address = $address;
        $this->pincode = $pincode;
        $this->email_user = $email_user;
        $this->gender = $gender;
        $this->dob = date('Y-m-d', strtotime($dob));
        $this->status = $status;
        $this->username = $username;
        $this->password = $password;
    }

    function adduser()
    {
        // 用预处理语句防止SQL注入
        $stmt = $this->dbconn->prepare("INSERT INTO `users` (`WEB_USERNAME`, `WEB_USERPASSWORD`, `USER_TYPE`, `NAME`, `IMAGE`, `TELEPHONE`, `MOBILE`, `ADDRESS`, `PIN`, `EMAIL`, `GENDER`, `DATE_OF_BIRTH`, `STATUS`) VALUES (?, ?, ?, ?, NULL, ?, ?, ?, ?, ?, ?, ?, ?)");
        $stmt->bind_param("sssssssssss", 
            $this->username, 
            $this->password, 
            $this->account_type, 
            $this->name, 
            $this->telephone, 
            $this->mobile, 
            $this->address, 
            $this->pincode, 
            $this->email_user, 
            $this->gender, 
            $this->dob, 
            $this->status
        );

        if ($stmt->execute()) {
            return ['code' => 200, 'message' => '用户添加成功'];
        } else {
            return ['code' => 500, 'message' => '添加失败:' . $stmt->error];
        }
    }

    public function __destruct()
    {
        $this->dbconn->close();
    }
}

// 显式获取POST参数,替代不安全的extract
$name = $_POST['name'] ?? '';
$account_type = $_POST['account_type'] ?? '';
$telephone = $_POST['telephone'] ?? null;
$mobile = $_POST['mobile'] ?? '';
$address = $_POST['address'] ?? '';
$pincode = $_POST['pincode'] ?? '';
$email_user = $_POST['email_user'] ?? '';
$gender = $_POST['gender'] ?? '';
$dob = $_POST['dob'] ?? '';
$status = $_POST['status'] ?? '';
$username = $_POST['username'] ?? '';
$password = $_POST['password'] ?? '';

$admin = new admin($dbconn, $name, $account_type, $telephone, $mobile, $address, $pincode, $email_user, $gender, $dob, $status, $username, $password);
$res = $admin->adduser();

// 设置JSON响应头
header('Content-Type: application/json');
echo json_encode($res);
?>

额外优化说明

  • 省略SQL中的ID_USER字段(自增主键),由数据库自动生成,避免冗余代码。
  • 预处理语句彻底规避SQL注入风险,是生产环境必备的安全措施。
  • 错误返回包含具体错误信息,便于调试定位问题。

内容的提问来源于stack exchange,提问作者Dennis Benny

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 12:38:12