将JSON从角度2发布到php

dan*_*iel 8 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);
});
Run Code Online (Sandbox Code Playgroud)

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

ink*_*nki 8

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

Array
(
    [{"order":"foobar"}] => 
)
Run Code Online (Sandbox Code Playgroud)

你可以通过使用密钥来"抓住"(虽然这是错误的方法)

key($_POST)
Run Code Online (Sandbox Code Playgroud)

例如:

$obj = json_decode(key($_POST));
echo $obj->order;
Run Code Online (Sandbox Code Playgroud)

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

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);
});
Run Code Online (Sandbox Code Playgroud)

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

$_POST['order']
Run Code Online (Sandbox Code Playgroud)

几点注意事项:

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

  • @GreenComputers就像='order = foobar&anotherkey = anothervalue&key3 = value3'用&符号分隔你的变量 (2认同)

小智 5

我不知道这是否是不好的做法,但这对我来说似乎是正确的,尽管它有点困扰我

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))
Run Code Online (Sandbox Code Playgroud)

并在 PHP 中

$post = json_decode($_POST['data']);
Run Code Online (Sandbox Code Playgroud)