我是Angular / Ionic的新手。我有一个将数据发布到PHP的Ionic表单。
以下是我的Angular代码:
我的活动服务:
event-service-rest.ts:
postAnEventRest(headers = null, params = null) {
return this.http.post(eventApiURL, { headers, params });
}
事件TypeScript页面:
create-event.ts
postAnEvent () {
const headers = new HttpHeaders()
.append('Authorization', 'this.authHeader')
.append('Accept', 'application/json')
.append('Content-Type', 'application/json');
const body = this.event;
this.eventService.postAnEventRest(headers, body)
.subscribe((data: any) => {
this.event = data;
},
(error: any) => {
console.log(error);
});
}
以下是我的PHP代码:
<?php
header('Access-Control-Allow-Origin: *');
header("Access-Control-Allow-Headers: *");
$jsonData = file_get_contents('php://input');
$data = json_decode($jsonData, true);
$event_title = $data['params']['event_title'];
$event_desc = $data['params']['event_desc'];
// Singleton Database Library - custom code for entering into database
$result = $db->insert('events', $event_title, $event_desc);
?>
Angular App将两个帖子发布到PHP服务器中。代码在数据库中创建一个空条目,并在数据库中输入正确数据的另一个条目。
所以,我查看了Apache日志文件(粘贴在下面)并且有两个条目。一个是&#34; OPTIONS&#34;和一个&#34; POST&#34;每个离子邮寄请求:
99.90.86.4 - - [13/Jan/2018:13:21:27 -0800] "OPTIONS /calendar/events-json2.php HTTP/1.1" 200 - "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36"
99.90.86.4 - - [13/Jan/2018:13:21:27 -0800] "POST /calendar/events-json2.php HTTP/1.1" 200 - "http://localhost:8100/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36"
我感谢任何帮助: 1.我做错了导致两个帖子到服务器? 2.这是构造和编写离子代码以发布数据的正确方法(创建发布数据并在TypeScript页面中进行订阅的服务/提供者页面)
答案 0 :(得分:0)
似乎作为CORS机制的一部分,将向服务器提供OPTIONS请求。
我尝试使用.htaccess忽略所有OPTIONS请求以解决此问题,但它没有帮助的情况。似乎必须发生对服务器的OPTIONS请求,以便POST请求作为CORS的一部分发生。
所以,我刚刚添加条件代码来检查POST请求,以便在数据库中添加条目,这解决了问题:
if($valid.Count -gt 0){
$valid |Export-Csv "C:\Emails\ValidEmails\ValidEmails.csv" -NoTypeInformation
}
if($invalid.Count -gt 0){
$invalid |Export-Csv "C:\Emails\ValidEmails\InvalidEmails.csv" -NoTypeInformation
}