将 JSON 从 Angular 2 发布到 php
Posted
技术标签:
【中文标题】将 JSON 从 Angular 2 发布到 php【英文标题】:Post JSON from angular 2 to php 【发布时间】:2016-05-21 10:21:09 【问题描述】:我尝试将数据从 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);
);
在 Angular 2 中,只能将字符串作为数据发布,而不能作为 Json 发布?这对我来说没问题,但我很难在 php 上获取发布的数据。我试过$obj = $_POST['order'];
【问题讨论】:
PHP 在构建 $_POSt 时希望发布数据为key=value
对。你没有发送那个,你发送了一个原始的 json 字符串,它基本上只是 value
组件。由于没有key
,php 不能将任何东西放入$_POST
,因为数组项必须有一个键。您可能可以通过阅读 php://input
来检索 json。
【参考方案1】:
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']
注意事项:
将标头 Content-Type 更改为 application/x-www-form-urlencoded(更多用于我自己的测试,因为这不会执行任何预检请求) 注意 order 是键值对字符串而不是 JSON 请注意,this.http.post 中的 order 在没有 JSON.stringify 的情况下按原样传递【讨论】:
谢谢它为我工作 :) 终于搜索了 4 小时 :) @inki: 让 order = 'order=foobar';发送一个数据。你能帮我发送多个数据吗?你能给我语法吗? @GreenComputers do it like = 'order=foobar&anotherkey=anothervalue&key3=value3' 使用 & 符号分隔变量【参考方案2】:我不知道这是不是不好的做法,但对我来说似乎是正确的,虽然它让我有点困扰
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']);
【讨论】:
【参考方案3】:同意你的观点,我们目前不能提供对象而不是字符串。这是一个正在进行的功能。看到这个问题:
https://github.com/angular/http/issues/69关于您在服务器端获取 JSON 数据的问题,这个问题应该对您有所帮助:
Read associative array from json in $_POST【讨论】:
以上是关于将 JSON 从 Angular 2 发布到 php的主要内容,如果未能解决你的问题,请参考以下文章
使用使用 Angular 6 的服务将 JSON 文件从一个组件传递到另一个组件
如何将从服务接收到的 json 数据传递到 Angular 4 的角材料组件中的数组