我一直试图解决这个问题差不多一天,没有运气。
我有一个简单的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对象获取我的数据。我错过了什么?
答案 0 :(得分:1)
PHP $ _REQUEST是:
一个关联数组,默认包含$ _GET,$ _POST和$ _COOKIE
的内容
当使用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