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

Angular项目无法向数据库发送数据,请求排查JSON解析错误

问题诊断与解决方案

你的错误 SyntaxError: Unexpected token d in JSON at position 0 核心原因是后端返回的不是有效的JSON格式内容,前端尝试用res.json()解析时失败了。结合你提供的代码,我找到了两个关键问题:

1. 数据库连接参数顺序完全错误(config.php)

MySQLi构造函数的参数顺序是固定的:mysqli(host, username, password, database),但你写反了所有参数:

// 错误代码
$mysqli = new mysqli(Db_name, Db_host, Db_password, Db_user);

这会直接导致数据库连接失败,后端会输出类似mysqli_connect(): (HY000/1045): Access denied for user...的错误文本(不是JSON),前端解析时自然会报错。

修复后的config.php连接代码:

define('Db_name', 'ionic_app');
define('Db_user', 'root');
define('Db_password', '');
define('Db_host', 'localhost');

// 修正参数顺序:host → user → password → db name
$mysqli = new mysqli(Db_host, Db_user, Db_password, Db_name);

// 可以加个连接检查,方便调试
if ($mysqli->connect_error) {
    die("Connection failed: " . $mysqli->connect_error);
}

2. file_aksi.php内容错误(粘贴重复了前端代码)

你提到这个文件重复了Post_providers.ts的代码,这显然是粘贴错误——这个文件应该是处理前端POST请求的后端逻辑,负责接收数据、操作数据库并返回JSON响应。

示例正确的file_aksi.php代码(根据你的业务调整表名和字段):

<?php
include 'config.php';

// 接收前端传来的JSON数据
$rawInput = file_get_contents('php://input');
$requestData = json_decode($rawInput, true);

// 检查必要字段是否存在(示例:假设你要提交username和email)
if (!isset($requestData['username']) || !isset($requestData['email'])) {
    echo json_encode([
        'success' => false,
        'message' => 'Missing required fields'
    ]);
    exit;
}

// 转义数据防止SQL注入
$username = $mysqli->real_escape_string($requestData['username']);
$email = $mysqli->real_escape_string($requestData['email']);

// 执行插入操作(替换成你的表名和字段)
$sql = "INSERT INTO users (username, email) VALUES ('$username', '$email')";

if ($mysqli->query($sql)) {
    echo json_encode([
        'success' => true,
        'message' => 'Data saved successfully'
    ]);
} else {
    echo json_encode([
        'success' => false,
        'message' => 'Database error: ' . $mysqli->error
    ]);
}

$mysqli->close();
?>

⚠️ 注意:这个文件必须只输出JSON格式内容,不能有任何多余的echo、HTML注释或PHP错误提示(否则前端解析会失败)。

3. 调试技巧(快速定位问题)

如果修复后还是有问题,可以用以下方法排查:

  • 后端调试:用Postman直接发送POST请求到http://localhost/server_api/file_aksi.php,查看返回的内容。如果返回的不是JSON,而是错误文本,说明后端逻辑还有问题。
  • 前端调试:临时修改postData方法,打印原始响应内容,确认后端返回的是什么:
return this.http.post(this.server + file, JSON.stringify(body), options)
.map(res => {
  console.log('Raw backend response:', res.text()); // 打印原始响应
  return res.json();
});

打开浏览器控制台查看这个日志,就能明确后端返回的内容是否符合预期。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 09:29:16