$ http.post在离子安卓应用中不起作用

时间:2014-12-23 11:36:23

标签: angularjs ionic-framework ionic

构建和运行离子应用程序时,我遇到了一个非常奇怪的问题。我从服务器调用Login API,它在浏览器中运行良好,当以

运行时
$ionic serve --lab

但是当在Android中安装应用程序时,它会出现403错误,并且不会提供有关错误代码的任何其他信息,可能,我不知道如何在Android混合应用程序中获取浏览器控制台日志。

我的登录功能如下

 login: function(user) {
            var deferred = $q.defer();          
            $http.post(SERVER_URL + '/auth/login', {
                username: user.username,
                password: user.password
            }).success(function(response, status, headers, config) {

                if (response.data && response.data[0]) {
                    Auth.setToken(response.data[0].token);
                    Auth.setUserId(response.data[0].id);
                    deferred.resolve(response);
                } else {
                    deferred.reject(response);
                }
            }).error(function(response, status, headers, config) {               
                deferred.reject(response);
            });

            return deferred.promise;
        }

但是,所有get请求都能正常工作。

4 个答案:

答案 0 :(得分:2)

我最近碰到了这个问题,我无法从我在iPhone上运行的应用程序或模拟器上发送任何东西而没有收到403,但它确实直接从任何浏览器工作,包括我手机上的那个和使用Postman-chrome插件。

这似乎是来自Ionic应用程序的任何POST请求的问题:它将Origin标题发送为file://。使用Play Framework 2.4后端,我必须完全禁用CORSFilter (从application.conf中删除play.http.filters才能使用它。我将进一步调查,稍后可能会提供更多细节。

  • 注意 - 我在客户端/应用程序端尝试了大量配置更改,包括Cordova白名单插件,X-Requested-With&amp; Content-Type标头设置,<allow-navigation href="*"\>,没有任何效果。

答案 1 :(得分:1)

访问元素为您的应用提供对其他域上资源的访问权限,它允许您的应用从外部域加载可以接管整个网络视图的网页。只需在config.xml

中添加它

 <access origin="*" subdomains="true"/>

答案 2 :(得分:1)

当我以

运行app时,它有效
$ionic run --livereload android

答案 3 :(得分:1)

当Play Framework 2.4后端时,我和@BatteryAcid有同样的问题。解决方案是在allowedOrigins中添加file://.

请参阅下面的application.conf参考资料

play.filters.cors {
  pathPrefixes = ["/*"]
  allowedOrigins = ["file://*", "*"]

  allowedHttpMethods = ["GET", "POST"]
  preflightMaxAge = 3 days
}

您可以为任何其他后端执行相同的操作。