簡體   English   中英

Angular http 郵不發

[英]Angular http Post is not send

我有以下簡單的發布方法:

createTask(taskName: String, parentTaskId: String) : Observable<any>{
    let headers : HttpHeaders = new HttpHeaders();
    headers.set('Content-Type', 'application/json; charset=utf-8');
    let body = {name:taskName,parentTaskId:parentTaskId,version:0};

    console.log("Body: ", headers, JSON.stringify(body), this.BASE_URL + "/save");

    return this.http.post(this.BASE_URL + "/save", body, {headers:headers});
  }

當我使用它時,console.log 顯示如下:

在此處輸入圖像描述

我問自己的第一件事:為什么標題是空的? 我認為應該有內容類型?

但真正的問題:什么都沒有發生......沒有發送帖子,瀏覽器告訴我沒有網絡流量,沒有發送帖子。 控制台中也沒有錯誤消息,當我使用與 Postman 完全相同的東西時,發送的帖子是 200。

這里有什么問題? 我看不出來...

更新:

通過單擊激活以下方法的按鈕發送帖子:

addEdit(parentId: String){
    this.tasksService.createTask(this.taskName, parentId);
  }

我發現這有效:

addEdit(parentId: String){
    this.tasksService.createTask(this.taskName, parentId).subscribe();
  }

但我不知道為什么。

帶有按鈕的組件位於單獨的模塊中,帶有 createTask 的服務在該文件夾之外,但它被調用(可以看到控制台日志)。

所以結構就像:

-app
--taskService
--customFormsModule
---tasklist
----taskMenu <== Button here

為什么訂閱的方法有效而另一種方法無效? 對我來說沒有意義。

首先,標頭是不可變的。 調用set后,您需要將其分配給 headers 變量。 正如 MikeOne 所說,您甚至不需要設置這些標題,因為當您發送 JSON 格式的內容時,angular 會自動為您添加它們。 其次,調用post時需要subscribe它,否則 observable 不會被執行(搜索cold vs hot observable):

所以要更新你的代碼:

createTask(taskName: string, parentTaskId: string) : Observable<any>{
  let headers : HttpHeaders = new HttpHeaders();
  headers = headers.set('Content-Type', 'application/json; charset=utf-8');
  
  let body = { name: taskName, parentTaskId, version: 0 };

  return this.http.post(`${this.BASE_URL}save`, body, { headers });
}

您可以通過以下方式從其他地方調用:

this.createTask('task', 'parent').subscribe((response) => {
  console.log(response); // response body
});

您還可以在創建標頭實例時直接傳入標頭:

const headers : HttpHeaders = new HttpHeaders({
  'Content-Type': 'application/json; charset=utf-8'
});

然后您不需要重新分配變量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM