我有一个在chrome浏览器和(genymotion)模拟器上运行良好的应用程序。
然而,如果我在智能手机上运行它,每个请求服务器(post, get, put)给出的结果:Failed to load resource: net::ERR_CONNECTION_TIMED_OUT
科尔多瓦:5.2.0
config . xml:
<content src="index.html" />
<access origin="*" />
<allow-navigation href="*" />
<allow-intent href="*" />
jquery:$.support.cors=true;
我的请求:(我已经做了同样的也与骨干,相同的结果)
$scope.loginRequestObject = $scope.getLoginObject();
$.ajax({
url : $scope.baseUrl + "/myTable",
type : 'post',
contentType : 'application/json; charset=utf-8',
scriptCharset : "utf-8",
data : JSON.stringify($scope.loginRequestObject),
dataType : 'json',
fail : function(a,b,c){
console.log(a);
console.log(b);
console.log(c);
},
success: function(a,b,c){
console.log(a);
console.log(b);
console.log(c);
});
我已经通过导出和运行(cordova运行android)运行我的应用程序,我的手机有无线连接。
@Asqan,
你犯了一个常见的错误,这个错误被Cordova/Phonegap的新开发者列在了"最容易犯的错误"中。在这个例子中,你需要添加white-list
插件和CSP
到你的网页。
替代方案是此快速修复-但要知道此修复删除了white-list
的所有需求。这会产生一个安全问题,您可能不希望忽略它。
快速修复将此添加到您的config.xml
<preference name="phonegap-version" value="3.7.0" />
长答案如下:
新开发Cordova/Phonegap的开发者最容易犯的错误:
- #6 未设置"phonegap版本";
- #7 未设置"
- #10 未添加新的"白名单";以及"白名单插件";
For #6 7
# 10使用CLI版本,如果您没有为您的平台或在"Phonegap构建"中分配版本,如果您没有在config.xml中设置Phonegap -version,您将获得最新版本。如果幸运的话,您的程序就会像预期的那样工作。如果您不够幸运,您将得到一组级联错误。
幸运的是,Holly Schinsky写了一篇很好的博客来解释这一切:
Cordova/PhoneGap版本混淆
http://devgirl.org/2014/11/07/cordovaphonegap-version-confusion/
这个相对*新*的要求意味着-访问任何网站或网络上的资源,你必须使用白名单和白名单插件。如果您使用cordova-android@4.0.0或更好的版本,则此要求将生效;包括cli-5.1.1。然而,如果你的版本在4.0.0之前,假设是3.5.0或3.7.0,那么你将不需要添加白名单要求。
要清楚,"白名单"已经存在了一段时间,但插件和需求是非常新的。正如你所料,当"白名单"添加后,事实上的开放访问特性已被弃用。或者换句话说,事实上的开放访问功能是计划和计划取消的。这一变化标志着开放获取功能的移除。
此外,内容安全策略(CSP)已经抓住了许多开发人员——因为它宣传得太差了。根据你的使用和你正在使用的Phonegap的版本,CSP需要进入你使用的每一个HTML页面,就像你必须等待' devicready '一样。然而,有些情况下根本不需要它。文档会让一些人感到困惑,请仔细阅读。该文档隐藏在许多最新文档页面的底部。
相关链接
Phonegap构建论坛:PGB升级到cli-5.1.1的注意事项,现在需要白名单
- Cordova白名单指南
- Phonegap白名单指南
- Phonegap构建白名单指南