SyntaxError:位置 0 处 JSON 中的意外标记 C
Posted
技术标签:
【中文标题】SyntaxError:位置 0 处 JSON 中的意外标记 C【英文标题】:SyntaxError: Unexpected token C in JSON at position 0 【发布时间】:2017-07-29 07:54:44 【问题描述】:我的应用程序中有这部分代码
addComment (body: Object): Observable<Comment[]>
//let bodyString = JSON.stringify(body); // Stringify payload
let bodyString = JSON.parse(JSON.stringify(body || null ))
let headers = new Headers( 'Content-Type': 'application/json' ); // ... Set content type to JSON
let options = new RequestOptions( headers: headers ); // Create a request option
return this.http.post(this.commentsUrl, bodyString, options) // ...using post request
.map((res:Response) => res.json()) // ...and calling .json() on the response to return data
.catch((error:any) => Observable.throw(error.json().error || 'Server error')); //...errors if any
当我尝试在我的应用程序中添加评论时,它会引发如下错误:
POST http://localhost:4200/assets/comments.json 404 (Not Found)
SyntaxError: Unexpected token C in JSON at position 0
有人可以帮助我吗?
完全语法错误堆栈:
SyntaxError: Unexpected token C in JSON at position 0
at Object.parse (<anonymous>)
at Response.Body.json (body.js:24)
at CatchSubscriber.selector (comment.service.ts:41)
at CatchSubscriber.error (catch.js:104)
at MapSubscriber.Subscriber._error (Subscriber.js:128)
at MapSubscriber.Subscriber.error (Subscriber.js:102)
at XMLHttpRequest.onLoad (xhr_backend.js:82)
at ZoneDelegate.webpackJsonp.1301.ZoneDelegate.invokeTask (zone.js:363)
at Object.onInvokeTask (ng_zone.js:264)
at ZoneDelegate.webpackJsonp.1301.ZoneDelegate.invokeTask (zone.js:362)
at Zone.webpackJsonp.1301.Zone.runTask (zone.js:166)
at XMLHttpRequest.ZoneTask.invoke (zone.js:416)
【问题讨论】:
我们可以看看你是怎么打电话给addComment
的吗?
为什么要字符串化,然后解析?
你能附上 SyntaxError 堆栈,以指示哪个代码行引发错误吗?而当addComment
被调用时,this.model
对象的值是多少?
@shaochuancs this.model的值为[object Object]。
根据堆栈,SyntaxError 源自Response.Body.json (body.js:24)
和CatchSubscriber.selector (comment.service.ts:41)
。哪一个出现在您的代码中?它表示哪一行?
【参考方案1】:
我正面临着确切的问题。
只是改变:
error.json()
到
JSON.parse(JSON.stringify(error))
【讨论】:
像魅力一样工作! :)【参考方案2】:您可能已经回应了以 C 开头的内容,例如 Connected 您应该只回显 json 响应,而不是一般的任何字符串!
【讨论】:
【参考方案3】:我遇到了类似的问题。我发现 Angular 不支持 spring boot 的返回类型函数。
函数的返回类型为ResponseEntity<String>
。
return ResponseEntity.ok().body(new String("Some Message"));
我改成ResponseEntity<ResponseMessage>
,把return修改成
return ResponseEntity.status(HttpStatus.OK).body(new ResponseMessage("Some Message"));
它奏效了。
ResponseMessage
类包含
public class ResponseMessage
private String message;
public ResponseMessage(String message)
this.message = message;
public String getMessage()
return message;
public void setMessage(String message)
this.message = message;
感谢 *** 社区。这是我的第一个答案。
【讨论】:
【参考方案4】:当我尝试在请求中发送一个空正文时,我遇到了类似的问题。你能确认发送的正文不是未定义的吗?
您可以尝试在帖子周围添加一个条件,在发送之前检查正文是否包含某些内容。
【讨论】:
【参考方案5】:当我的 php 文件包含连接成功消息时,我收到了类似的错误。当我删除所有期望 json_encode() 的回显命令时,我让它工作了所以请确保在你的 php 文件中只有echo json_encode($data)
的回显
【讨论】:
【参考方案6】:你可以试试这段代码吗
例子
addComment(user: ApiDashboard)
return this.http.post(this.commentsUrl,user).map(response =>
response.json());
你可以试试
addComment(user: Comment)
return this.http.post(this.commentsUrl,user).map(response =>
response.json());
这里的注释是模型文件
例如
export class ApiDashboard
id: string;
name: string;
price: number;
在我的情况下,当您在服务文件中打印了一些值时会出现这种情况
service.ts
private handleError(error: any): Promise<any>
//console.error('An error occurred', error);
return Promise.reject(error.message || error);
我评论了 console.log() 然后它可能工作正常你可以尝试解决方案。
【讨论】:
以上是关于SyntaxError:位置 0 处 JSON 中的意外标记 C的主要内容,如果未能解决你的问题,请参考以下文章
SyntaxError:app.js 中位置 0 处 JSON 中的意外标记 C [重复]
SyntaxError:在 Graphiql 中测试时,JSON 中位置 0 处出现意外标记 <
如何修复 SyntaxError:位置 0 处 JSON 中的意外标记 b
SyntaxError:位置 1 处 JSON 中的意外标记 o