这是我的代码:
import { HttpClient, HttpErrorResponse, HttpHeaders } from '@angular/common/http';
logIn(username: string, password: string) { const url = 'http://server.com/index.php'; const body = JSON.stringify({username: username, password: password}); const headers = new HttpHeaders(); headers.set('Content-Type', 'application/json; charset=utf-8'); this.http.post(url, body, {headers: headers}).subscribe( (data) => { console.log(data); }, (err: HttpErrorResponse) => { if (err.error instanceof Error) { console.log('Client-side error occured.'); } else { console.log('Server-side error occured.'); } } ); }
这里是网络调试:
Request Method:POST Status Code:200 OK Accept:application/json, text/plain, */* Accept-Encoding:gzip, deflate Accept-Language:en-US,en;q=0.8 Cache-Control:no-cache Connection:keep-alive Content-Length:46 Content-Type:text/plain
并且数据存储在“请求有效负载”中,但在我的服务器中没有收到 POST 值:
print_r($_POST); Array ( )
我相信错误来自 POST 期间未设置的标头,我做错了什么?
新HttpHeader类的实例是 不可变 对象。调用类方法将返回一个新实例作为结果。所以基本上,您需要执行以下操作:
HttpHeader
let headers = new HttpHeaders(); headers = headers.set('Content-Type', 'application/json; charset=utf-8');
或者
const headers = new HttpHeaders({'Content-Type':'application/json; charset=utf-8'});
更新:添加多个标题
let headers = new HttpHeaders(); headers = headers.set('h1', 'v1').set('h2','v2');
const headers = new HttpHeaders({'h1':'v1','h2':'v2'});
更新:接受 HttpClient 标头和参数的对象映射
由于5.0.0-beta.6现在可以跳过HttpHeaders对象的创建,直接将对象映射作为参数传递。因此,现在可以执行以下操作:
HttpHeaders
http.get('someurl',{ headers: {'header1':'value1','header2':'value2'} });