将 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 文件从一个组件传递到另一个组件

将数据从一个组件传递到另一个 Angular 2

如何将从服务接收到的 json 数据传递到 Angular 4 的角材料组件中的数组

如何将数据表从 .net core 5.0 web api 作为 json 传递到 Angular 前端?

将项目发布到 JSON 服务器 db-Angular

将多个对象从Angular控制器POST到Web API 2