AngularJS $资源对Cordova的POST调用不适用于iOS / Android设备但在浏览器上工作

时间:2015-03-04 22:11:12

标签: android ios angularjs cordova post

我有以下代码在我的终点上进行“POST”,如下所示:

var response = $resource(serviceURL, {}, {
        get: {
            method: "POST",
            headers: {
                'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
            },
            transformRequest: function(obj) {
                var str = [];
                for(var p in obj) {
                    str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p]));
                }
                return str.join("&");
            }
        }
    });

response.get({
        grant_type : grantType,
        client_id : clientId ,
        client_secret: clientSecret,
        username : username,
        password : passwordValue
    }, function(data) {
        alert("Authenticated ...");
    }, function(error) {
        alert("Error");
    });

这个用于验证用户的代码在桌面浏览器中运行(在Chrome上测试),但它与我的Cordova iOS和Android项目的代码相同,但在设备/模拟器/模拟器上,它只执行失败方法。

我检查了Cordova的config.xml文件,这不是跨域问题(我在config.xml文件中有< access orogin =“*”/>)。

我一直试图解决这个问题几个小时但仍然没有运气。

为什么它只在设备/模拟器/模拟器中失败但在浏览器中工作?

2 个答案:

答案 0 :(得分:2)

从cordova-android 4.0.0开始,你必须安装白名单插件。也就是说,你必须运行cordova plugin add cordova-plugin-whitelist,一切都应该正常工作。

  

白名单功能已更新

     

需要添加 新的cordova-plugin-whitelist插件才能继续使用白名单       现在支持设置内容安全策略(CSP),并且是白名单的推荐方法(请参阅插件自述文件中的详细信息)。        默认情况下,网络请求在没有插件的情况下被阻止,因此安装此插件甚至允许所有请求,即使您使用的是CSP。

如需进一步说明,请参阅Cordova Android 4.0.0 release

答案 1 :(得分:0)

好的,我解决了这个问题,但我仍然不确定它是否是最佳解决方案,因为我在控制台上看到一些JS错误说"拒绝设置不安全的标题' Origin'&#34 ;。  我只需使用一些有效的https URL设置标头的Origin属性,如下所示:

headers: {
            "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
            "Origin": "https://www.google.com"
        }

这对我有用。