Angular 9调用PHP RESTful API遇HttpErrorResponse问题求解决方案
解决Angular 9 HttpClient对接PHP RESTful API的HttpErrorResponse问题
我来帮你排查这个问题,从报错信息来看,虽然HTTP状态码是200 OK,但ok: false说明Angular无法正确解析返回的响应内容,核心问题出在PHP的响应格式和Angular的请求路径上,下面一步步解决:
1. 修正PHP代码的响应格式
你的PHP代码有两个关键问题:
- 响应头设置成了
text/html,但Angular的HttpClient默认期望接收JSON格式的响应 - 你调用了
json_encode($response)但没有输出,反而用print_r($response)输出了数组的文本打印结果,这完全不是Angular能解析的JSON
修改后的PHP代码如下:
<?php $___notjson=1; // 改为JSON类型的响应头,确保编码正确 header('Content-Type: application/json; charset=utf-8'); // 解决跨域问题(如果Angular和PHP不在同一端口/域名) header("Access-Control-Allow-Origin: http://localhost:4200"); header("Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS"); header("Access-Control-Allow-Headers: Content-Type"); require 'uAPImodule.php'; $request = new Request(array( 'oauth_consumer_key' => 'check', 'oauth_consumer_secret' => 'fkFNhdbbRENO1GQilHxWvO86QabO6g', 'oauth_token' => 'OfTW8pDo1aIjNvHOdv.nRbZAER5x.LRndWwltepI', 'oauth_token_secret' => '6bnfzAGvMpHpJF1gs9XWqSWGBAdAzdXJWxAj1S..' )); $response = $request->get('/news', array( // 你的请求参数 )); // 输出JSON格式的响应,这才是Angular需要的内容 echo json_encode($response); // 移除print_r,它会输出非JSON的文本内容 // print_r($response); ?>
2. 修正Angular的请求路径
你现在请求的是assets/uAPIwork.php,这是错误的:Angular的assets目录是静态资源目录,Angular开发服务器(ng serve)不会解析PHP代码,PHP文件必须放在PHP服务器(比如XAMPP的htdocs目录)中运行,所以你需要修改请求URL为PHP服务器的地址。
修改后的Home.ts代码:
request(){ // 替换成你的PHP服务器地址,比如localhost是PHP服务器的域名/IP this.http.get('http://localhost/uAPIwork.php') .subscribe( res => { console.log('请求成功:', res); }, err => { console.error('请求失败详情:', err); } // 加上错误回调,方便调试 ); }
3. 额外注意事项
- 确保你的PHP服务器(比如Apache/Nginx)已经正常启动,PHP文件放在服务器的根目录(比如XAMPP的
htdocs) - 先直接在浏览器中访问
http://localhost/uAPIwork.php,确认返回的是标准的JSON格式,排除PHP本身的逻辑错误 - 如果仍然有跨域问题,确保PHP中的CORS头设置正确,允许Angular所在的域名(
http://localhost:4200)访问
内容的提问来源于stack exchange,提问作者Maher
相关产品推荐
相关产品推荐

