升级到Cordova 5.0 + cordova-android@4.0后,Ajax请求失败

我最近升级到cordova5.0(和cordovaAndroid 4.0),从那时起,我的应用程序不能再访问外部资源。

我仍然在config.xml中有<access origin="*" /> (和以前一样),而AndroidManifest.xml中仍然有<uses-permission android:name="android.permission.INTERNET" /> ,但Ajax调用被拒绝,没有解释(“textStatus”参数是“错误”,“errorThrown”参数为空,和xhr.state()返回“拒绝”)。

我已经validation没有任何请求正在触发服务器,所以它似乎被Android停止,但日志不给任何解释,为什么…

我可以从Android浏览器访问正确的URL,而不是从应用程序。

ajax请求是通过调用Backbone.js的Backbone.sync()来完成的,后者最终调用了jquery的$ .ajax()。 我没有改变任何关于如何打电话…刚刚升级cordova。

是否有新的需求/设置networking请求,在cordova5.0,或任何我需要做不同于以前的cordova版本?

有谁知道一个方法,我可以得到更多的信息,为什么Android和/或cordova是拒绝的要求?

Solutions Collecting From Web of "升级到Cordova 5.0 + cordova-android@4.0后,Ajax请求失败"

我跟踪到了android@4.0.0 cordova平台的罪魁祸首。 现在需要新的cordova-plugin-whitelist插件。

它可以安装

 cordova plugin add cordova-plugin-whitelist 

或通过添加

 <plugin name="cordova-plugin-whitelist" spec="1" /> 

到config.xml,然后使用它进行configuration

 <allow-navigation href="*" /> 

代替旧的<access origin="*" />标记。

当这样的问题出现的时候,这个日志不会再吐出“白名单拒绝”的错误信息(这会为我节省大量的时间),但是也许会迟一点。

两件事情

  1. 确保您使用的ajax url允许跨源请求
  2. 你是否在传递相关头文件的同时提出交叉源请求

读书

http://enable-cors.org/

如何在AngularJs中启用CORS

http://backbonetutorials.com/cross-domain-sessions/

在cordova6.X你需要删除内置的白名单插件,并重新安装新版本的插件。

 cordova plugin remove cordova-plugin-whitelist 

并重新安装插件

 cordova plugin add cordova-plugin-whitelist 

然后将<allow-navigation href="*" />replace为config.xml文件,而不是<access origin="*" />

如果你正在使用cordova6.xx你需要卸载内置的cordova-plugin-whitelist使用

cordova插件删除cordova插件白名单

并通过使用重新安装它

cordova插件添加cordova插件白名单

即使问题仍然存在重新启动命令提示符并尝试。