2013-10-12 41 views
1

我一直在努力争取整天的这个问题,并在各地搜索。这可能是因为我无法找到的解决方案是一个网页...但我已经看了,如问题和解决方案:PhoneGap不发布AJAX(jsonp)请求

Ajax call on phonegap not sending request

JQuery mobile + Phonegap : Ajax calls not working on Android Emulator

既不存在的解决方案似乎解决了我的问题。

我想要做的就是向我的远程服务器发出一个AJAX调用,上传几个参数并下载一些内容。该脚本在浏览器中完美工作,但根据Phonegap中文件的轻微更改,可能会抛出“超时”错误,或者只是简单地说“错误”。代码如下(AJAX的端点是一个开发终点,我会离开它,所以你可以尝试打它):

<html> 
<head> 
<script type="text/javascript" charset="utf-8" src="jquery-1.10.2.min.js"></script> 
</head> 

<body> 
<ul> 
<div id="app-status-ul"> 
<li>Loaded</li> 
</div> 
</ul> 
</body> 
<script> 
var serverRegHit = function(data, httpStat){ 
    $("#app-status-ul").append('<li>Server Reg OK, HTTP status: '+httpStat+'</li>'); 
    $("#app-status-ul").append('<li>Data Status: '+JSON.stringify(data)+'</li>'); 
}; 
var serverRegFail = function(data, httpStat){ 
    $("#app-status-ul").append('<li>Server Reg FAIL, HTTP status: '+httpStat+'</li>'); 
    $("#app-status-ul").append('<li>Data Status: '+JSON.stringify(data)+'</li>'); 
}; 
     $.ajax({url:"http://keb.bz/gcm/?deviceid=12345", 
       jsonp: 'callback', 
       dataType: 'jsonp', 
       timeout: 25000, 
       success: serverRegHit, 
       error: serverRegFail}); 

</script> 
</html> 

我一直在使用科尔多瓦2.9审判,降级到2.5,但这似乎也没有帮助。

我的config.xml已经列入白名单。*和keb.bz域,权限允许应用程序访问清单中的互联网 - 我假设这是可行的,因为它能够成功检索GCM设备ID。

我已经尝试过使用JSON,JSONp,TEXT和各种数据类型的AJAX,但这些都没有任何区别。

Cordova/PhoneGap中是否存在另一个我缺少的配置点?

任何帮助在这里将不胜感激。

+0

在logcat的控制台任何异常/错误?你确定jQuery库加载成功吗?首先,你应该确保纯JavaScript工作,然后尝试测试jQuery是否正常。 – xiaowl

+0

JQuery加载正常,因为它成功地将错误输出到DOM,并且无法注意到log cat中的任何异常。 – Kaiesh

+0

确保您的应用具有“网络访问”权限。 – xiaowl

回答

3

感谢@xioawl让我再次检查我的manifest.xml。原来我没有正确配置权限。

最后,我卷起使用科尔多瓦2.5,jQuery的1.10,(未使用jQuery移动),设定我的RES/config.xml中具有以下的访问路径:

<access origin="http://127.0.0.1*" /> 
<access origin="http://keb.bz" subdomains="true" /> 
<access origin=".*" /> <!-- only during development --> 

配售这个片段后包括所有的JavaScript库:

<script> 
$(document).bind("mobileinit", function(){ 
    $.mobile.allowCrossDomainPages = true; 
}); 
</script> 

,并使用以下的manifest.xml权限:

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

我的JSONp查询继续看如下:

$.ajax({url:"http://keb.bz/gcm/?deviceid=12345", 
     jsonp: 'callback', 
     dataType: 'jsonp', 
     timeout: 25000, 
     success: serverRegHit, 
     error: serverRegFail}); 

希望这对某人有用!

1

我今天也有类似的错误,当我更新使用在线的PhoneGap编译我的应用程序...

我过去遵循的程序在2015年四月然后 做了几tweeks今天,没什么大事,遵守它,我所有的ajax请求都已经过时了。我做了并警告错误字符串,并说“超时”。

然后我指定phonegap版本为3.7.0,并重新编译...所有我的阿贾克斯再次工作。 不确定CLI5.1和5.2发生了什么变化,但它杀了我的应用程序。

短期的解决方案,尽快3.7可能不会支持了,然后我会卡住更改...很好的时间去本地我猜

+0

你有没有在这方面取得进展?我通过使用人行横道并将铬降级到版本42x来“解决”它。我不觉得这个 – msander

+0

@msander好...不,不幸的是没有。 – Shaakir