php - 带有 IONIC 3 和 PHP 的 CORS
问题描述
当我从 IONIC 3 中的 APP 发送用户名和密码时,我收到了与 CORS 相关的下一条消息:
Blockquote 从 origin 访问 ' http://localhost/Service_mobile/service.php ' 的XMLHttpRequest http://localhost:8100已被 CORS 策略阻止:对预检请求的响应未通过访问控制检查:否Access-Control-Allow-Origin' 标头出现在请求的资源上。
我在 service.php 中有下一个标题:
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Credentials: true');
header('Access-Control-Allow-Headers: *');
header('Access-Control-Allow-Methods: GET, POST, PATCH, PUT, DELETE, OPTIONS');
header('Content-Type: application/json; charset=utf-8');
require_once($_SERVER['DOCUMENT_ROOT'] . '/libs/adodb5/adodb.inc.php');
function conect()
{
global $database, $server, $db_user, $db_password;
$database = "test";
$server = "localhost";
$db_user = "sa";
$db_password = "sa";
$db = ADONewConnection('odbc_mssql');
$dsn = "Driver={SQL Server};Server=" . $server . ";Database=" . $database . ";";
$db->Connect($dsn, $db_user, $db_password);
return $db;
}
$postjson = json_decode(file_get_contents('php://input'),true);
if($postjson["action"] == "verify"){
echo 'TEST';
}
和 conction.ts 中的下一个代码
import { Injectable } from '@angular/core';
import { Http, Headers, RequestMethod ,RequestOptions } from '@angular/http';
import 'rxjs/add/operator/map';
@Injectable()
export class ConexionAPI{
constructor(private http:Http){
}
login(username,password){
var _url = "http://localhost/Service_mobile/service.php";
var _body = {"action":"verify","ID_USER": username, "PASSWORD": password };
var _header = new Headers({'Content-Type':'Application/json'});
var _option = new RequestOptions({method:RequestMethod.Post,headers:_header});
return this.http.post(_url,_body,_option).map(res=>res.json());
}
}
主页.ts
import { Component } from '@angular/core';
import { NavController} from 'ionic-angular';
import { ToastController } from 'ionic-angular';
import { Conex } from '../conection/conection';
@Component({
selector: 'page-home',
templateUrl: 'home.html',
providers: [Conex]
})
export class HomePage {
username: string;
password: string;
constructor(public navCtrl: NavController,
public conex: Conex,
public toastCtrl: ToastController) {
}
enter(){
this.conexion.login(this.username,this.password).subscribe(data=>{
if(data==null){
let toast = this.toastCtrl.create({
message: 'Error!',
duration: 3000
});
toast.present();
}else{
let toast = this.toastCtrl.create({
message: 'Correct!',
duration: 3000
});
toast.present();
}
});
}
}
我忘记了什么??
解决方案
添加你的 PHP 文件。这对我有用。
header('Access-Control-Allow-Origin: *');
header("Access-Control-Allow-Headers: X-API-KEY, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method, Authorization");
header("Access-Control-Allow-Methods: GET, POST, OPTIONS, PUT, DELETE");
$method = $_SERVER['REQUEST_METHOD'];
if ($method == "OPTIONS") {
die();
}
推荐阅读
- node.js - 如何正确使用 morgan 和 nginx?
- c# - 如何对winform按键和按钮事件进行单元测试
- javascript - JavaScript 箭头函数
- postgresql - org.postgresql.util.PSQLException:错误:插入或更新表违反外键约束
- javascript - 为什么初始 CSS 样式在 DOM element.style 字段上不可见?
- javascript - vuetify 的 v-autocomplete 选择选项后无法编辑文本输入
- python - “忽略源层 Python*”及其可能原因
- django - Django (DRF) & React - Forbidden (CSRF cookie not set)
- powershell - Powershell 在文本文件中搜索新内容
- powershell - 在 PowerShell 中处理 COM 事件