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

如何通过jQuery Ajax获取PHP脚本返回的JSON数据及单属性读取报错排查

问题原因
  • 后端返回内容不是纯JSON:你在PDO连接成功的分支里先执行了echo "success";,后续才输出JSON编码的参数,最终返回给前端的内容是success{"message":"success","status":"ok"},格式不符合JSON规范,无法被正常解析为JS对象。同时异常捕获分支里的错误输出也会额外插入内容,进一步破坏JSON结构。
  • 前端AJAX未指定返回数据类型:你没有给$.ajax配置dataType: "json",jQuery默认会把返回结果当做普通字符串处理,就算返回的是纯JSON,拿到的result也是字符串类型,直接调用.message属性自然会报错。
  • 额外存在SQL注入风险:你直接把POST接收的参数拼接进SQL语句,没有做预处理,存在严重的安全漏洞。
修复方案

修改insert.php代码

删掉所有不必要的输出,统一用JSON格式返回结果,同时替换为预处理SQL避免注入风险:

<?php 
$servername = "localhost";
$dbname = "test";
$username = "root";
$password = "";

// 初始化统一返回结构
$data = [
    'message' => '',
    'status' => 'error'
];

try {
    $conn = new PDO("mysql:host=$servername;dbname=$dbname;charset=utf8", $username, $password);
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    $name = $_POST['name'];
    $quantity = $_POST['quantity'];
    $price = $_POST['price'];

    // 预处理SQL避免注入
    $sql = "insert into product (product_name,product_quantity,product_price,barcode_image) values(?, ?, ? ,'')";
    $stmt = $conn->prepare($sql);
    $stmt->execute([$name, $quantity, $price]);

    $data['message'] = "success";
    $data['status'] = "ok";
} catch(PDOException $e) {
    $data['message'] = "操作失败:".$e->getMessage();
}

// 仅输出一次JSON,确保前面没有任何空格、换行、额外输出
echo json_encode($data);
?>

修改前端AJAX配置

新增dataType参数指定返回JSON格式,jQuery会自动把返回内容解析为JS对象:

$.ajax({
    type: "post",
    url: 'insert.php',
    data: {'name': name, 'quantity': quantity,'price':price},
    dataType: 'json', // 新增这行配置
    success: function(result){
        console.log(result.message);
        console.log("success");
    }
});

如果修改后仍有问题,可在success回调里先执行console.log(typeof result)确认类型,如果是字符串可以手动用const res = JSON.parse(result)转成对象后再读取属性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 14:54:05