我研究离子。并得到了这个错误。这是我的app.js:
var app = angular.module('eMoMo', ['ionic', 'ngCordova'])
.config(['$httpProvider', function ($httpProvider) {
//Reset headers to avoid OPTIONS request (aka preflight)
$httpProvider.defaults.headers.common = {};
$httpProvider.defaults.headers.post = {};
$httpProvider.defaults.headers.get = {};
$httpProvider.defaults.headers.delete = {};
$httpProvider.defaults.headers.put = {};
$httpProvider.defaults.headers.patch = {};
$httpProvider.defaults.headers.common['Access-Control-Allow-Headers'] = '*';
//$httpProvider.defaults.headers.common['Authorization'] = 'Basic ' + btoa(my_id+ ':' + my_pass")
}]);
app.controller('MainViewController', function($scope, $http) {
$http({
method:"GET",
url: "my_url"
headers: {
'content-type': 'application/x-www-form-urlencoded; charset=utf-8',
'authorization': 'Basic ' + btoa('my_username' + ':' + 'my_pass')
'access-control-allow-origin': '*'
}
}).then(function(categories){
console.log(categories);
});
});
app.run(function($ionicPlatform) {
$ionicPlatform.ready(function() {
if(window.cordova && window.cordova.plugins.Keyboard) {
cordova.plugins.Keyboard.hideKeyboardAccessoryBar(true);
cordova.plugins.Keyboard.disableScroll(true);
}
if(window.StatusBar) {
StatusBar.styleDefault();
}
});
}
)
我尝试研究,它与CORS有关,但是我已经安装了一个chrome的插件来禁用该错误。我怎么解决这个问题。 ?
答案 0 :(得分:0)
由于您要添加自定义标头,因此您正在触发preflight request。据推测,您的插件只会在Chrome处理之前将Access-Control-Allow-Origin: *
粘贴到响应中。当服务器响应带有错误的OPTIONS请求时,这没有用。
您有四种选择:
选项4的起点是删除:
$httpProvider.defaults.headers.common['Access-Control-Allow-Headers'] = '*';
和
'access-control-allow-origin': '*'
...因为Access-Control-Allow-Origin和Access-Control-Allow-Headers是响应标题,对请求完全没有意义。
您可能仍会遇到手动添加授权标题的问题。
答案 1 :(得分:-1)