SyntaxError:位于0的JSON中的意外标记C.

时间:2017-03-08 16:21:39

标签: json http angular typescript observable

我的应用程序中有这部分代码

 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(未找到)
  SyntaxError:位于0的JSON中的意外标记C

有人可以帮助我吗?

完全SyntaxError堆栈:

  

SyntaxError:位于0的JSON中的意外标记C.       在Object.parse()       在Response.Body.json(body.js:24)       在CatchSubscriber.selector(comment.service.ts:41)       在CatchSubscriber.error(catch.js:104)       在MapSubscriber.Subscriber._error(Subscriber.js:128)       在MapSubscriber.Subscriber.error(Subscriber.js:102)       在XMLHttpRequest.onLoad(xhr_backend.js:82)       在ZoneDelegate.webpackJsonp.1301.ZoneDelegate.invokeTask(zone.js:363)       at Object.onInvokeTask(ng_zone.js:264)       在ZoneDelegate.webpackJsonp.1301.ZoneDelegate.invokeTask(zone.js:362)       在Zone.webpackJsonp.1301.Zone.runTask(zone.js:166)       在XMLHttpRequest.ZoneTask.invoke(zone.js:416)

7 个答案:

答案 0 :(得分:3)

我正面临着这个问题。

只需改变:

error.json()

JSON.parse(JSON.stringify(error))

答案 1 :(得分:1)

我遇到了类似的问题。我发现Angular不支持spring boot的return type函数。 该函数的返回类型为return ResponseEntity.ok().body(new String("Some Message"));

ResponseEntity<ResponseMessage>

我将其更改为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; } } 类包含

my = [4,5,7,16,17,35,20,37]

for i in my:
    j = 2
    while j < i:
        if i % j != 0:
          print(i)
        break # you need to put the break out of if statement,so it will go to the next number to test, Hope this help
    else:
        print("Prime No not found")

感谢Stackoverflow社区。这是我的第一个答案。

答案 2 :(得分:0)

当我尝试在请求中发送空体时,我遇到了类似的问题。你能否确认被发送的尸体未定义?

您可以尝试在帖子周围添加一个条件,在发送之前检查正文是否包含某些内容。

答案 3 :(得分:0)

// Local properties
  private model = new Comment(new Date(), '', '');
  private editing = false;

// Input properties
 @Input() editId: string;
 @Input() listId: string;


submitComment(){
    // Variable to hold a reference of addComment/updateComment
    let commentOperation:Observable<Comment[]>;

    if(!this.editing){
        // Create a new comment
        commentOperation = this.commentService.addComment(this.model)
    } else {
        // Update an existing comment
         commentOperation = this.commentService.updateComment(this.model)
    }

    // Subscribe to observable
    commentOperation.subscribe(
                            comments => {
                                // Emit list event
                                EmitterService.get(this.listId).emit(comments);
                                // Empty model
                                this.model = new Comment(new Date(), '', '');
                                // Switch editing status
                                if(this.editing) this.editing = !this.editing;
                            }, 
                            err => {
                                // Log errors if any
                                console.log(err);
                            });
}

这就是我调用addComment的方式

答案 4 :(得分:0)

当我的php文件包含连接成功消息时,我得到了类似的错误。当我删除所有echo命令时,期望json_encode(),我得到它的工作因此请确保在你的php文件中只有echo json_encode($data)的回声

答案 5 :(得分:0)

你能尝试使用这段代码

吗?

示例

  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()然后它可以正常工作解决方案。

答案 6 :(得分:0)

您可能已经回显了以 C 开头的内容,例如已连接 您应该只回显json响应,而不回显任何String!