2017-03-08 66 views
2

我有這部分代碼在我的應用語法錯誤:在位置JSON意外標記C^0

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堆棧:

SyntaxError: Unexpected token C in JSON at position 0 at Object.parse() 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)

+0

我們可以看看你如何調用'addComment'? – YounesM

+2

爲什麼你串行,然後解析? –

+0

您可以附加SyntaxError堆棧,以指示哪個代碼行拋出錯誤?當'addComment'被調用時,'this.model'對象的值是什麼? – shaochuancs

回答

0

我也有過類似的問題,當我試圖在請求中發送一個空體。你能否確認發送的身體不是未定義的?

您可以嘗試在帖子周圍添加一個條件,在發送前檢查主體是否包含某些內容。

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

+0

應將此信息從答案列表移至問題。 – shaochuancs

1

我面臨的正是問題。

只是改變:

error.json() 

JSON.parse(JSON.stringify(error)) 
+0

像魅力一樣工作! :) –

0

我得到了類似的錯誤,當我的PHP文件包含連接全成的消息。當我刪除了所有回聲命令期望json_encode()的,我知道了,那麼工作確保在你的PHP文件中,有隻echo json_encode($data)

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(印刷服務文件中的一些值會出現這種情況),那麼它可能工作好,你可以嘗試解決方案。

相關問題