首页 > 解决方案 > Angular 发布到 PHP

问题描述

我正在尝试将数据从 Angular 发布到 PHP。

角度发布请求

var body = { "action":"getvouchernumber","vouchertype": vtype, "vmonth": vmonth, "vyear":vyear };
return this.http.post(this.BaseURI+'voucherprocessing.php',body);

开发人员模式的网络选项卡中显示的输出 在此处输入图像描述

PHP页面上的标题

header("Access-Control-Allow-Origin: *");
header("Content-Type: application/json; charset=UTF-8");
header("Access-Control-Allow-Methods: POST");
header("Access-Control-Max-Age: 3600");
header("Access-Control-Allow-Headers: Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With");

在 PHP 中获取数据

$data = file_get_contents("php://input");

输出 在此处输入图像描述

但是当我尝试获取对象的任何值并将其设置为变量时,它不起作用。

$action = $data->action

我也试过做

json_decode(file_get_contents("php://input"));

但这也会返回错误。

作为对@Tiago 帖子的回应,我添加了 json_decode($data, true) 并尝试通过 $data->action 获取价值,结果如下

在此处输入图像描述

文本字段中的值正确,但显示为错误。

如果我不向 json_decode 添加第二个参数,它仍然返回 null。PHP版本是5.6.31

标签: phpjsonangular

解决方案


由于安全原因(每个人都可以访问 Angular 代码),Angular 不直接与数据库通信。相反,它使用 HTTP 请求和对服务器/API(REST、GraphQL)的 HTTP 响应,可以使用 PHP(如您的情况)构建,但可以使用例如 NodeJS。然后,这个 API 可以与数据库交互(也可以做一些不同的事情,比如简单地上传文件)。

当涉及到 REST API 的 HTTP 请求时,重要的是要注意我们需要知道 URL(API 端点),我们想要使用的 HTTP 动词(在这种情况下是 POST),并且还可以发送 Header ({"Content -Type": "application/json") 和一个 Body(发送一些信息 - 请注意,使用 HTTP Verb GET 是不可能的)。

在这种特殊情况下,您使用了HttpClientModule的 post() 方法将数据发送到服务器。将假定您将正确的 URL 作为第一个参数给出,并且还可以在第二个参数中看到正文。

所以,现在问题只能发生在 PHP 端。为了获取从 Angular 发布的数据并将其关联到变量,请使用

$postdata = file_get_contents("php://input");

由于此数据采用 JSON 格式,并且 PHP 无法识别 JSON 数据,因此您需要将其提取/转换为数组

$request = json_decode($postdata, TRUE);

所以现在它应该是简单的 PHP 数组。当然,您可以在整个过程中进行条件/验证,以确保这些变量($postdata 和 $request)始终保存数据,否则会给出特定错误。

正如您在对这个答案的评论中提到 $request 正在返回 null,有一个问题已经解决,您可以从那里阅读更多相关信息。


推荐阅读