将JSON从角度2发布到php

时间:2016-02-10 21:01:27

标签: php json typescript angular

我尝试将数据从角度2发布到php:

let headers = new Headers();
headers.append('Content-Type', 'application/json');
var order = {'order': this.orders};

this.http.post('http://myserver/processorder.php', JSON.stringify(order), {
    headers: headers
}).subscribe(res => {
    console.log('post result %o', res);
});

在角度2中,只能将字符串作为数据而不是Json发布?这对我来说没问题,但我很难在php上获取发布的数据。我试过了$obj = $_POST['order'];

3 个答案:

答案 0 :(得分:8)

Marc B是正确的,但是发生的事情是$ _POST数组将包含一个空值,其键设置为您传递的JSON字符串...

Array
(
    [{"order":"foobar"}] => 
)

你"可以"通过使用...来获取密钥(虽然这是错误的方法)。

key($_POST)

例如:

$obj = json_decode(key($_POST));
echo $obj->order;

但是您可以做的是将数据作为值键对发送:

let headers = new Headers();
headers.append('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
let order = 'order=foobar';

this.http.post('http://myserver/processorder.php', order, {
    headers: headers
}).subscribe(res => {
    console.log('post result %o', res);
});

然后在PHP中,您可以使用以下方式获取数据:

$_POST['order']

很少有事情需要注意:

  • 将标题内容类型更改为application / x-www-form-urlencoded(更多用于我自己的测试,因为它不执行任何预检请求)
  • 请注意订单是键值对字符串而不是JSON
  • 注意this.http.post中的顺序是在没有JSON.stringify的情况下按原样传递的

答案 1 :(得分:4)

我不知道这是不好的做法,但对我来说似乎是对的,虽然这让我感到困扰

const headers = new Headers();
headers.append('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');

const obj = { nome: 'gabriel', age: 20 };
const body = 'data=' + JSON.stringify(obj);

this.http.post('/test.php', body, { headers })
  .subscribe(res => console.log(res.json()), res => console.error(res))

在php中

$post = json_decode($_POST['data']);

答案 2 :(得分:2)

同意你的意见,我们现在无法提供对象而不是字符串。这是一项正在进行的功能。看到这个问题:

关于在服务器端获取JSON数据的问题,这个问题可以帮助您: