我正在创建我的第一个离子应用程序,但我在与cors挣扎,我在这个领域没有很多经验,所以这个问题可能看起来很愚蠢。
我无法访问api网站,因此我无法更改任何内容。 这是我用来从api站点获取数据的代码。我已经读过,使用离子服务测试时,这只是一个问题,但是我已经尝试构建Android应用程序并将apk转移到我的手机上,但它似乎在那里工作(我无法在手机上看到控制台登录以测试它:))
app.controller('VolleyCtrl', function($http, $scope) {
$scope.wedstrijden = [];
$http.get('http://www.volleyadmin2.be/services/wedstrijden_xml.php?province_id=5&stamnummer=O-0696&format=json')
.success(function(response) {
angular.forEach(response, function(child) {
$scope.wedstrijden.push(child);
})
});
});
答案 0 :(得分:3)
如果您使用的是较新版本的Cordova(或最新的Ionic CLI)来开发您的应用,则当您的应用尝试发出网络请求时,您可能会遇到http 404错误。
这可以通过Cordova Whitelist plugin快速解决。
您可以在Ionic docs: Cordova Whitelist找到更多文档。
<强>解决方案:强>
在shell /终端中运行以下命令:
ionic plugin add https://github.com/apache/cordova-plugin-whitelist.git
您现在唯一需要做的就是为config.xml
添加一个属性
文件:
<allow-navigation href="*" />
答案 1 :(得分:0)
可能有很多原因。
处理CORS意味着配置后端和前端。 在您的后端,取决于您的api正在运行的Web服务器。
我认为你不会使用&#34; ...你可以通过--disable-web-security flag打开它来禁用它来检查cors ...& #34;
最好只处理控制器中的http promise并在服务上移动http请求。 我可以告诉你我修复了什么以避免CORS预检麻烦。
默认情况下,Angular在$ http.defaults.headers中设置标头。{HTTP_VERB}。
我的案例是$ http.defaults.headers.post,内容类型为&#39; :&#39; application / json&#39;。 这种内容类型触发了chrome中的cors。 如果您设置“内容类型”并不重要。手动。这在Angular默认设置。
因此,修复程序将转到您的app.js文件,并在.config部分中插入您的代码
app.config(['$http', function ($http) {
//Reset headers to avoid OPTIONS request (aka preflight)
$httpProvider.defaults.headers.post = {};
}]);
答案 2 :(得分:0)
尝试了很多没有运气的解决方案后,最终
cordova plugin rm cordova-plugin-ionic-webview
cordova plugin add cordova-plugin-ionic-webview@latest
已解决我的问题。