2016-02-08 98 views
1

我有问题与cordova/phonegap/ajax来自网页的请求。由于该应用正在与phonegap developer-app在手机上运行并完美地发送ajax requests。我认为这跟permissions/plugins有什么关系。但是,当我使用cordova安装应用程序不发送任何东西,整个ajax request回报:Phonegap AJAX请求undefined

readyState: 0 
responseText: undefined 
status: 0 
text status: error 
error 

在​​3210我设置

<access origin="*" /> 

AndroidManifest.xml心中已经设定

<uses-permission android:name="android.permission.INTERNET" /> 

这里是ajax request本身

$.ajax({ 
    method: "GET", 
    crossDomain: true, 
    dataType: 'json', 
    url: 'http://mywebsite.com/projectname/index.php', 
    data: { x: userLocation.latitude, y: userLocation.longitude }, 
    success: function(data){ 
     alert("Success: "+ data); 
    }, 
    error: function(xhr, textStatus, err) { 
     alert("readyState: " + xhr.readyState); 
     alert("responseText: "+ xhr.responseText); 
     alert("status: " + xhr.status); 
     alert("text status: " + textStatus); 
     alert("error: " + err); 
    } 
}); 

包括cordova.js到项目:

<script type="text/javascript" src="cordova.js"></script> 
<script src='js/jquery.js'></script> 
<script> 
    $(document).bind('mobileinit', function() { 
     $.mobile.changePage.defaults.changeHash = false; 
     $.mobile.hashListeningEnabled = false; 
     $.mobile.pushStateEnabled = false; 
    }); 
</script> 
<script ...here comes js file where ajax is called out 

设置这些没有工作,要么

$.support.cors = true; 
$.mobile.allowCrossDomainPages = true; 

回答

0

如果您正在运行科尔多瓦5或更高版本,则需要在内容安全策略meta标签您的HTML,以便向外部服务器发出Ajax请求。如果你从一个较旧的Cordova版本开始升级到5或6,那么你的index.html可能没有其中的一个。如果您从CLI启动了一个新的Cordova 5或6应用程序,那么模板“Cordova Ready”应用程序将会有一个,但所提供的示例不允许向其他服务器发出Ajax请求,除非您明确配置它。

您可以添加这样的事情到您的index.html,使Ajax请求的任何地方:

<meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: https://ssl.gstatic.com 'unsafe-eval'; style-src 'self' 'unsafe-inline'; media-src *; connect-src http://api.fixer.io"> 

或者看一下如何配置在content-security-policy.com的Connect-SRC或我的博客文章here配置更严格的CSP适合您的需求。

此外,您可能希望使用Cordova“deviceready”事件而不是“mobileinit”,因为在Cordova完全准备好之前您可能会过早地进行Ajax调用,所以在(onDeviceReady)回调函数中进行Ajax调用:

document.addEventListener('deviceready', this.onDeviceReady, false); 

或在调用之后执行的内容,表示Cordova已准备就绪。

0

显然花了我很长时间才弄明白,所以继承人如何得到它的工作: 首先我卸载项目中的所有插件,然后删除文件夹平台/ android。在CMD中键入:

cordova platform add android 

然后再次安装必要的插件。 现在工作。