php - 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
解决方案
由于安全原因(每个人都可以访问 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,有一个问题已经解决,您可以从那里阅读更多相关信息。
推荐阅读
- python - Flask:导入我的数据库播种脚本时,没有正确引用 db
- laravel - 无法隐藏水平条形图vue js的x轴
- javascript - 如何在 SpeechRecognition Web Speech API 中禁用句子级自动更正
- javascript - 我如何无法在 javascript 中滚动?
- dynamics-crm - CRM 2013 Onprem:在 CRM 中登录的用户访问区域
- php - 为sql中的列设置唯一约束
- ios - 可以将 PWA 应用发布到应用商店 Swift
- python - 我们如何在不中断实时流量的情况下更新已部署的 Flask 应用程序?
- angular - 错误:无法匹配任何路由。URL 段:'admin/projects/projectssCategory/list'
- reactjs - 反应 useEffect 钩子导致无限循环