【发布时间】:2018-02-27 04:07:03
【问题描述】:
运行命令 ionic serve 时出现错误。我正在尝试使用 post 方法调用 api。
我得到了错误:
无法加载http://abc.localhost/api/auth/login:对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。 Origin 'http://localhost:8101' 因此不允许访问。
我该如何克服这个问题?
我已经在 api 模块中编写了 YII2 框架中的 api,具有以下行为:
public function behaviors() {
$behaviors = parent::behaviors();
$behaviors['contentNegotiator'] = [
'class' => 'yii\filters\ContentNegotiator',
'formats' => [
'text/html' => Response::FORMAT_JSON,
'application/json' => Response::FORMAT_JSON,
'application/xml' => Response::FORMAT_XML,
],
];
$behaviors['corsFilter'] = [
'class' => \yii\filters\Cors::className(),
'cors' => [
'Origin' => ['*'],
'Access-Control-Request-Method' => ['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'HEAD', 'OPTIONS'],
'Access-Control-Request-Headers' => ['*'],
'Access-Control-Allow-Credentials' => true,
'Access-Control-Max-Age' => 86400,
'Access-Control-Allow-Origin' => ['*', 'http://abc.localhost/*', 'http://localhost:8101/*']
],
];
return $behaviors; }
而我的 ionic2 cordova api 调用脚本是:
loading.present();
console.log(this.singleton.apiGuestToken);
let headers = new Headers();
headers.append("Accept", 'application/json');
headers.append('Content-Type', 'application/json');
headers.append('Authorization', this.singleton.apiGuestToken);
headers.append('withCredentials', 'true');
headers.append('Access-Control-Allow-Origin', 'http://abc.localhost');
let options = new RequestOptions({ headers: headers });
console.log(options);
let paramsData = { 'userType': userType, 'email': this.email, 'password': this.password };
console.log(paramsData);
this.http.post('http://abc.localhost/api/auth/login', paramsData, options)
.map(res => res.json()) //this.singleton.apiUrl +
.subscribe(data => {
let resultData = JSON.parse(data['_body']);
console.log(resultData);
}, error => {
console.log(error);// Error getting the data
loading.dismiss();
});
甚至,我在 chrome 检查中看不到发布参数和身份验证。 提前致谢!
【问题讨论】:
标签: angular ionic-framework ionic2 cordova-2.0.0