如何通过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
相关产品推荐
相关产品推荐

