我的方法transmitProject(project: ProjectModel): Observable<boolean>
中有一个通过HttpClient
的发布请求,我想将数据发布到后端:
-我的transmitProject
方法内部
const params = {
projectId: project.projectId,
description: documentation.description,
// some other attributes ...
};
return this.http.post(this.conf.url, params).pipe(
map(response => {
console.log(response);
return true;
})
);
...直到这里一切正常。但是请求将发布数据设置为json格式。为了测试后端服务器,请返回转储的$ _POST变量-> null。
请求有效载荷: {projectId:“ ...”,描述:“ ...”,经度:10,纬度:10,…}
实际上应该是: projectId = ...说明= ...经度= 10纬度= 10 ...
->在Postman中,一切正常。
答案 0 :(得分:3)
这里的问题是Angular默认发送JSON类型的发布请求。
您可以更改PHP后端,而可以使用$_POST
来读取JSON:
<?
..
$JSON = file_get_contents("php://input");
if (!empty($JSON ))
{
$params = json_decode($JSON, true);
}
?>
或者,如果您真的想中继以x-www-form-urlencoded
发送
您可以使用 URLSearchParams
将内容类型自动设置为application/x-www-form-urlencoded
:
let body = new URLSearchParams();
body.set('username', username);
body.set('password', password);
this.http.post(this.loginUrl, body).map(...);
当然,如果您像这样正确编码身体,也可以手动进行
let body = `username=${username}&password=${password}`;
但是您必须手动将标题设置为application/x-www-form-urlencoded
。
赞
this.http.post(this.loginUrl, body, { headers: headers }).map(...);
答案 1 :(得分:1)
这不是很明显,但是您没有正确使用httpClient
。
您可以在this SO post中找到这种情况的说明。
如果您不想使用JSON,但希望坚持使用x-www-form
编码,则您的代码应类似于:
const body = new HttpParams()
.set('your property name', ** property value **)
.set(...);
return this.http.post(this.conf.url,
body.toString(),
{
headers: new HttpHeaders()
.set('Content-Type', 'application/x-www-form-urlencoded')
}
).pipe(... same code as you already have ...);