【发布时间】:2021-06-22 23:20:37
【问题描述】:
我需要这方面的帮助。可能这是愚蠢的,但经过数小时的调查,我看不出问题所在。 我有一个 Angular 10 项目。这是后端(php中的api):
...
$result = array(
'status' => 'success',
'code' => 200,
'data' => $productos
);
echo json_encode($result);
});
它返回这个 json:
{
"status":"success",
"code":200,
"data":
[
{
"id":"1",
"nombre":"Gazpacho tradicional",
"marca":"Hacendado",
"puntuacionYuca":"90\/100",
"puntuacionCoco":"9\/10",
"puntuacionMyReal":"Buen procesado",
"mediaVagana":"9",
"imagen":"gazpacho-hacendado.jpg",
"supermercado":"Mercadona",
"comentario":"Saludable en otras marcas"
}
]
}
我在几个网站上检查了json,它是有效的。
这是 angular service.ts 中的代码:
getProductosVaganos(){
return this._http.get(this.urlvaganos+'productos-vaganos').pipe(map((response: any) => response.json()));
}
这是angular component.ts中的代码:
getProductosVaganos(){
this._productoVaganoService.getProductosVaganos().subscribe(
result => {
if (result.code != 200){
console.log(result);
}else{
this.productosVaganos = result.data;
}
},
error => {
console.log(<any>error);
}
);
}
它在本地开发模式下完美运行。但是当我编译项目并将其部署到主机的 public_html 文件夹时,它会在 component.ts 函数中返回此错误:
list.component.ts > getProductosVaganos() > error: SyntaxError: Unexpected token { in JSON at position 65
at JSON.parse (<anonymous>)
at gd.json (main.99255eee2d008be2c609.js:1)
at O.project (main.99255eee2d008be2c609.js:1)
at O._next (main.99255eee2d008be2c609.js:1)
at O.next (main.99255eee2d008be2c609.js:1)
at XMLHttpRequest.s (main.99255eee2d008be2c609.js:1)
at l.invokeTask (polyfills.35a5ca1855eb057f016a.js:1)
at Object.onInvokeTask (main.99255eee2d008be2c609.js:1)
at l.invokeTask (polyfills.35a5ca1855eb057f016a.js:1)
at a.runTask (polyfills.35a5ca1855eb057f016a.js:1)
public_html文件夹的结构与本地相同。
我已经测试了 JSON.stringify() 和 JSON.parse() 方法,但没有找到解决方案。 我也测试过在 service.ts 的方法中删除行尾的 .json()。在这种情况下,当我在 chrome 中调试时,在生产中,它进入 component.ts 方法的“result”内部,但 result.data 元素是“undefined”。
我认为问题出在本地和生产之间,因为它们有不同的语言,本地的打字稿和生产中的编译版本,即 javascript,但我不知道如何解决它。
任何帮助将不胜感激。
问候。
【问题讨论】:
-
将
pipe(map((response: any) => response.json()))更改为pipe(tap(response =>console.log(response)),map((response: any) => response.json()))时在控制台中看到什么 -
抱歉耽搁了,我在上班时间之前写的,现在已经写完了。我把这个新参数放到管道方法中:
return this._http.get(this.urlvaganos+'productos-vaganos').pipe(tap(response =>console.log("tap: ", response)),map((response: any) => response.json()));奇怪的是,控制台没有显示这个console.log。它显示错误:ERROR TypeError: Object(...) is not a function at e.getProductosVaganos (main.043912fd7b9d49cb76b0.js:1) at e.getProductosVaganos (main.043912fd7b9d49cb76b0.js:1) at e.ngOnInit (main.043912fd7b9d49cb76b0.js:1) ... -
我输入任何类型来点击响应并返回:
gd {_body: "{↵ "success": false,↵ "error-codes": [↵ "inva…dona","comentario":"Saludable en otras marcas"}]}", status: 200, ok: true, statusText: "OK", headers: sd, …} headers: sd {_headers: Map(13), _normalizedNames: Map(13)} ok: true status: 200 statusText: "OK" type: 2 url: "http://vaganos.es/...
标签: javascript json angular typescript production