Angular2 http.post不会将JSON数据发送给API

时间:2017-09-01 13:25:01

标签: php json angular

我一直试图解决这个问题差不多一天,没有运气。 我有一个简单的http.post请求:

  import { Component } from '@angular/core';
  import { Http, Response, Headers, RequestOptions } from '@angular/http';
  import 'rxjs/add/operator/toPromise';

  @Component({
    selector: 'SendPost',
  })
  export class SendPostComponent {

    constructor(
        private http:Http,
    ) {}

    private urlPost:string = 'www.mydomain.com/api/order.php'

    private addToBasket() {
      var data = {
        foo: "bar",
        foo1: "another"
      }
        var postData = JSON.stringify(data);

        let headers = new Headers({'Content-Type': 'application/json'}); //x-www-form-urlencoded
        headers.append('Access-Control-Allow-Methods', "GET, POST, OPTIONS");
      let options = new RequestOptions({ headers: headers });

      this.http.post(
            this.urlPost, 
            postData, 
            options
        )
        .toPromise()
                .then((res) => {this.extractData(res)});
    }       

    private extractData(res: Response) {
        console.log('extractData:', res);
    }

  }

我将API端点条带化为绝对最小值:没有.htacces,只是php文件这个简单的代码:

<?php print_r(json_encode($_REQUEST)); die; ?>

我一直在获得一个空数组。但是,如果我改变这样的代码:

var data2 = 'foo=bar&foo1=another'
let headers = new Headers({ 'Content-Type': 'application/x-www-form-urlencoded' });

然后$ _REQUEST对象获取我的数据。我错过了什么?

1 个答案:

答案 0 :(得分:1)

PHP $ _REQUEST是:

  

一个关联数组,默认包含$ _GET,$ _POST和$ _COOKIE

的内容

$_POST

  

当使用application / x-www-form-urlencoded或multipart / form-data作为请求中的HTTP Content-Type时,通过HTTP POST方法传递给当前脚本的关联变量数组。

PHP无法解析&#34; application / json&#34;数据,解决方法是php wrapper,使用&#34; file_get_contents(&#39; php:// input&#39;)&#34;您可以通过以下方式从请求实体主体获取数据:

$body = file_get_contents('php://input');
$data = json_decode($body);
print_r($data);  // here is what you need