Angular 4 HttpClient无法使用POST发送数据

时间:2017-10-10 13:12:23

标签: php angular post httpclient

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。客户端和服务器具有相同的来源。

3 个答案:

答案 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获取所有内容,因为它对我来说更直接。