Angular 4.4.4
这是我的应用程序组件
constructor(
private http: HttpClient,
)
this.http.post('/api.php', {name, age}).subscribe(data => {
console.log(data);
});
api.php -> exit(json_encode($_POST));
请勿在$ _POST
中收到任何数据return [];
(let xmlRequest = new XMLHttpRequest();
....
工作正常)
我尝试设置标题
let headers = new HttpHeaders().set('Content-Type', 'application/json; charset=UTF-8');
无法正常工作
对不起这个问题,但我花了一天时间仍然无法找到解决方案。
PS。客户端和服务器具有相同的来源。
答案 0 :(得分:1)
请尝试我希望它能帮到你
import { Injectable } from '@angular/core';
import { Observable } from 'rxjs';
import 'rxjs/add/operator/map';
import { HttpClient } from '@angular/common/http';
@Injectable()
export class LandingService {
private apiUrl = 'http://localhost:5000/';
list:any;
headers : any;
constructor(private _http: HttpClient){
this.headers = new Headers();
this.headers.append('Content-Type', 'application/json');
}
getsearchResponse(searchText){
this.list ={"sentences":searchText}
return this._http.post(this.apiUrl+'searchBotsNew',this.list,this.headers)
.map(res =>res.json())
.do(data => console.log(JSON.stringify(data)));
}
}
答案 1 :(得分:1)
我找到了解决方案。
在PHP中,$_POST
只接受formdata。
使用请求标题' Content-Type:application / json'你可以通过file_get_contents('php://input');
所以
$_POST = json_decode(file_get_contents('php://input'));
答案 2 :(得分:1)
您需要将参数放入Angular端的FormData对象中。
const params = new FormData();
params.append('para1', 'value1');
params.append('para2', 'value1');
this.http.post('/api.php', params).subscribe(....)
现在,您可以使用$ _POST [' para1']和$ _POST [' para2']获取项目的PHP部分的参数。
我喜欢这个解决方案,而不是使用file_get_contents获取所有内容,因为它对我来说更直接。