从PHP+MySQL取数据转JSON遇SyntaxError错误求助
解决Angular解析JSON时的SyntaxError: Unexpected token T错误
嘿,这个错误我见得不少,核心问题很明确:你的PHP后端返回的内容不是合法的纯JSON,前端拿着混了其他文本的内容去解析,自然就报错啦。咱们一步步来排查解决:
第一步:先看PHP接口到底返回了啥
直接在浏览器地址栏里输入你的PHP接口URL,看看返回的完整内容。你肯定会发现里面不是干净的JSON——要么混了PHP的错误提示(比如Notice:或者Warning:,不过你说的是T开头,大概率是你自己加的调试输出,比如Total records: ...这类文本),这些额外内容直接破坏了JSON的结构,导致前端解析失败。
举个反例,如果你的PHP代码是这样的:
echo "Got data from DB!"; echo json_encode($userData);
那返回的内容就是Got data from DB![{"id":1,"name":"xxx"}],这根本不是合法JSON,前端解析到第二个字符T的时候就懵了,直接抛出错误。
第二步:把PHP后端改成只输出纯JSON
这一步是关键,要确保PHP只返回JSON,没有任何多余输出:
- 删掉所有调试用的
echo、print语句,别再输出无关文本了; - 检查PHP有没有自动输出的错误信息(比如未定义变量的Notice),这些会偷偷混进响应里。要么在PHP开头加上两行代码屏蔽错误输出:
error_reporting(0); ini_set('display_errors', 0);
要么干脆把这些错误修复掉(比如给变量赋默认值),从根源解决问题;
- 最后,一定要设置正确的响应头,然后只输出JSON:
// 告诉前端这是JSON格式的响应 header('Content-Type: application/json'); // 输出JSON数据 echo json_encode($yourDataArray); // 确保后面没有其他代码输出内容 exit;
第三步:Angular这边也优化一下
另外,你代码里用的是旧版的Http模块,现在Angular推荐用HttpClient,它会自动帮你解析JSON,省得手动调用JSON.parse还容易出问题:
- 先在
AppModule里导入HttpClientModule:
import { HttpClientModule } from '@angular/common/http'; @NgModule({ imports: [ // ...其他你已经导入的模块 HttpClientModule ] }) export class AppModule { }
- 然后在组件里替换成
HttpClient:
import { Component } from '@angular/core'; import { HttpClient } from '@angular/common/http'; @Component({ selector: 'app-sign-up', templateUrl: './sign-up.component.html', styleUrls: ['./sign-up.component.css'] }) export class SignUpComponent { constructor(private http: HttpClient) { // 调用获取数据的方法 this.getDbData(); } getDbData() { this.http.get('你的PHP接口地址') .subscribe( (data) => { console.log('拿到的数据:', data); // 直接就是解析好的对象/数组,不用手动转JSON }, (error) => { console.error('请求出错啦:', error); } ); } }
最后总结一下
先通过浏览器确认PHP接口的输出是纯JSON,这是解决问题的核心。只要后端输出合法了,前端这边不管用旧的Http还是新的HttpClient,都能正常解析数据啦。
内容的提问来源于stack exchange,提问作者Poornima K
相关产品推荐
相关产品推荐

