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&lt;String&gt;

return ResponseEntity.ok().body(new String("Some Message"));

我改成ResponseEntity&lt;ResponseMessage&gt;,把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

SyntaxError:位置 1 处 JSON 中的意外标记 o

SyntaxError:位置 2 处 JSON 中的意外标记 e