我有以下代码在我的终点上进行“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 =“*”/>)。
我一直试图解决这个问题几个小时但仍然没有运气。
为什么它只在设备/模拟器/模拟器中失败但在浏览器中工作?
答案 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"
}
这对我有用。