json - 在 Ionic 4 中通过 HTTP POST 将 json 数据发送到后端不起作用。[注意:试图获取非对象的属性]
问题描述
我尝试通过 Ionic 4 中的 http 帖子通过 URL 将 http 请求发送到我的 PHP 后端http://myexamplehost#1.com/api
,它给了我回复Notice : trying to get property of non object...
。
当我通过邮递员通过 URL 发送我的 json 数据时,http://myexamplehost#1.com/api
它工作得很好。我猜我通过 Ionic 4 中的 http post 发送的 json 数据在某种程度上是错误的。
因此,我尝试https://myexamplehost#2.com/api
通过 Ionic 4 中的 http 帖子通过我的其他 URL 发送我的 json 数据,并且长期看它工作得很好。
这是我通过邮递员发送的json:
{
"id": "",
"date": "2019-09-09",
"name": "jason"
}
这是我通过 Ionic 4 page.ts 中的 http 帖子发送的内容:
mydata: Idata = {
id:string;
date:string;
name:string
}
saveData(){
this.dk.insertData(this.mydata).subscribe((result:any)=>{
console.log(result['_body']);
});
}
这是服务方法的样子:
insertData(data:Idata){
return this.http.post(this.configUrl+'?ins=true',data,{
headers: { 'Content-Type': 'application/json',
'Accept': 'application/json',
'Access-Control-Allow-Methods': 'POST, GET, OPTIONS, PUT'
}
});
这是后端的样子:
if (isset($_SERVER['HTTP_ORIGIN'])) {
header("Access-Control-Allow-Origin: *");
header('Access-Control-Allow-Credentials: true');
header('Access-Control-Max-Age: 86400'); // cache for 1 day
}
// Access-Control headers are received during OPTIONS requests
if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {
if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_METHOD']))
header("Access-Control-Allow-Methods: GET, POST, OPTIONS");
if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']))
header("Access-Control-Allow-Headers: {$_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']}");
exit(0);
}
$postdata = file_get_contents("php://input");
$request = json_decode($postdata);
print_r(json_encode($request));
// echo json_encode($request->name."-".$request->date);
// echo json_encode($request->tgl);
$result = $obj->insData("example_tb","null,'".date('Y-m-d',strtotime($request->date))."','".$request->name."'");
所以我真正想知道的是,这是一个 CORS 问题还是在我的情况下它是一个代码问题?origin has been blocked by CORS policy
因为我确实在控制台中收到了错误消息。我该如何解决这个问题?
解决方案
我想指出,Access-Control-Request-Method是浏览器在 CORS 预检请求上设置的请求标头,它只能有一个值。
其中Access-Control-Allow-Methods是一个 CORS 响应标头,由后端返回。
代替
'Access-Control-Allow-Methods': 'POST, GET, OPTIONS, PUT'
和
'Access-Control-Request-Method': 'POST'
推荐阅读
- export - 将部分页面渲染到文件
- node.js - 多容器 Docker 应用程序部署失败
- python - python 正则表达式读取部分文本文件
- javascript - Firefox 停止调用 AJAX 函数
- python - 根据列标题添加新行
- f# - Xamarin Android:资源未拾取 F# 图标
- r - dimnames(s$v) <- list(colnames(x), paste0("PC", j)) 中的错误:dimnames 2 的错误长度不等于数组范围
- asp.net-core - asp.net核心部署持久错误代码='0x80004005:8000808c。在赢 2012r2
- azure - 逻辑应用性能是否取决于连接器?
- c# - 我可以创建一个指针来从任何来源轮询浮点数吗?