私が間違っていることを理解していません。jsonを取得しようとすると、サーバーは「undefined」を返します。
POST(url, data) {
var headers = new Headers(), authtoken = localStorage.getItem('authtoken');
headers.append("Content-Type", 'application/json');
if (authtoken) {
headers.append("Authorization", 'Token ' + authtoken)
}
headers.append("Accept", 'application/json');
var requestoptions = new RequestOptions({
method: RequestMethod.Post,
url: this.apiURL + url,
headers: headers,
body: data
})
return this.http.request(new Request(requestoptions))
.map((res: Response) => {
if (res) {
return { status: res.status, json: res.json() }
}
});
}
そして私の機能:
login(username, password) {
this.POST('login/', {test: 'test'}).subscribe(data => {
console.log(data)
})
}
これを試すと、リクエストの本文は次のようになります。
したがって、実際のjsonを送信する代わりに、単に「[object Object]」を送信します。 「リクエストペイロード」の代わりに「JSON」にする必要があります。私は何を間違えていますか?
ペイロードを文字列化する必要があります
var requestoptions = new RequestOptions({
method: RequestMethod.Post,
url: this.apiURL + url,
headers: headers,
body: JSON.stringify(data)
})
しばらくの間、jsonデータをAngularに投稿する質問に対する視覚的な答えを探していましたが、役に立ちませんでした。私は最終的に何かが機能するようになったので、共有しましょう:
タイプT
のjsonレスポンスボディを期待していると仮定しましょう。
const options = {headers: {'Content-Type': 'application/json'}};
this.http.post<T>(url, JSON.stringify(data), options).subscribe(
(t: T) => console.info(JSON.stringify(t))
);
import { HttpClient, HttpHeaders } from '@angular/common/http';
export class MyHttpService {
constructor(protected http: HttpClient) {}
headers = new HttpHeaders({
'Content-Type': 'application/json'
});
postJson<T>(url: string, data: any): Observable<T> {
return this.http.post<T>(
url,
JSON.stringify(data),
{headers: this.headers}
)
}
最初は、このような入れ子になったcontent-typeを渡す方法を見逃していました。
{headers:{'Content-Type': 'application/json'}}
ヘッダーは
'Content-Type': 'application/json'
そして
body: data
あるべき
body: JSON.stringify(data);