gpt4 book ai didi

php - 通过 HTTP POST 将数据从 Angular 应用程序发送到 API

转载 作者:搜寻专家 更新时间:2023-10-30 21:19:29 25 4
gpt4 key购买 nike

我正在尝试使用 HTTP POST 将单个对象从我的 Angular 5 应用程序发送到 JSON 格式的 php API,但我无法让它工作。我知道这可能是非常基础的,但我是这个主题的新手,谷歌无法帮助我,或者我没有搜索正确的关键字。

错误:

1: 在 data.service.ts 中使用 httpOptions 参数 -> http post 方法 with httpOption

2: 在 data.service.ts 中没有 httpOptions 参数 -> http post 方法php 文件中的第 55 行是:$name=$_POST["name"];我也在文件中标记了它。 without httpOptions

3:网络 enter image description here

我不明白为什么在添加内容类型 header 时会出现“405 不允许的方法错误”:application/json(错误 1)。如果我删除它,错误将不会出现,但没有数据到达 API(错误 2)。

Content Type Header 在 API 的 php 文件中设置。 PHP 文件中也允许使用 POST 方法。

我使用 ReSTLet Client 测试了 API。它适用于 Content-Type: application/x-www-form-urlencoded 但也不适用于 application/json:

json enter image description herex-www-form-urlencoded enter image description here

我做错了什么?

  • Angular v5 -> package.json
  • Angularapp -> localhost:4200
  • API -> localhost:81 Apache

data.service.ts -> full File

const httpOptions = { headers: new HttpHeaders({ 'Content-Type':'application/json' })};

...

saveName(name: Name) {
const body = JSON.stringify(name.name);
return this.http.post('http://localhost:81/apitest/src/app/data/name.php', body, httpOptions);
}

应用程序接口(interface)

<?php
// required headers
header("Access-Control-Allow-Origin: *");
header("Content-Type: application/json");
header("Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTION");
header("Access-Control-Max-Age: 3600");
header("Access-Control-Allow-Headers: Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With");

$connection = mysqli_connect('localhost', 'api', 'test', 'apitest');

$request_method = $_SERVER['REQUEST_METHOD'];

switch($request_method){
case 'GET':
if(!empty($_GET['nameId'])){
$nameId = intval($_GET['nameId']);
getNames($nameId);
} else {
getNames();
}
break;
case 'POST':
insertNames();
break;
case 'PUT':
updateNames();
break;
case 'DELETE':
deleteNames();
break;
default:
header('HTTP/1.0 405 Method Not Allowed');
break;
}

function insertNames()
{
global $connection;
$name=$_POST["name"]; // LINE 55 | Undefined index: name in [...] on line <b>55</b><br />
if(isset($_POST['name'])){
$query="INSERT INTO form SET name='{$name}'";
if(mysqli_query($connection, $query))
{
$response=array(
'status' => 201,
'status_message' =>'Name Added Successfully.'
);
}else
{
$response=array(
'status' => 400,
'status_message' =>'Name Addition Failed.'
);
}
}
else
{
$response=array(
'status' => 400,
'status_message' =>'Request Body Empty.'
);
}
header('Content-Type: application/json');
echo json_encode($response);

app.component.ts -> full File

saveName() {
this.dataService.saveName(this.name).subscribe(
data => {
this.getNames();
return true;
}, error => {
console.error('Failed');
}
);
}

HTML 表单

<html>
<head>
<title>API TEST</title>
</head>
<body>
<form action="data/name.php" method="POST">
<label for="name">Name: </label>
<input type="text" name="name" [(ngModel)]="name.name">
{{name.name}}
<button name="post" (click)="saveName()">post</button>
</form>
</body>
</html>

最佳答案

你试过吗?

$json = file_get_contents('php://input');
$obj = json_decode($json, true);

$name = $obj['name']

来自:Reading JSON POST using PHP

关于php - 通过 HTTP POST 将数据从 Angular 应用程序发送到 API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48930444/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com