PhoneGap不发出AJAX(jsonp)请求

时间:2013-10-12 11:54:18

标签: javascript android jquery ajax cordova

我一整天都在努力解决这个问题,并且已经在各处搜索了一下。可能是因为我无法找到一个包含解决方案的页面......但我已经看过问题和解决方案,例如:

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>

我尝试过使用cordova 2.9,并降级到2.5,但这似乎也没有帮助。

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

我尝试过通过AJAX使用JSON,JSONp,TEXT和各种dataType,但这些都没有任何区别。

我错过了Cordova / PhoneGap中的另一个配置点吗?

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:3)

感谢@xioawl让我仔细检查我的manifest.xml。结果我没有在那里正确配置权限。

最后,我结束了使用Cordova 2.5,jQuery 1.10,(没有使用jQuery Mobile),使用以下访问路径设置我的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 :(得分:1)

今天,当我使用在线PhoneGap编译器更新我的应用程序时,我遇到了类似的错误...

我上次在2015年4月完成了应用程序。 然后今天做了一些调整,没什么大不了的,遵守它,我所有的ajax请求都没有结束。我做了并警告错误字符串,所有它都说“超时”。

然后我将phonegap-version指定为3.7.0,并重新编译...我的所有ajax再次工作。 不确定CLI5.1和5.2改变了什么,但它杀了我的应用程序。

短期解决方案,很快就会不再支持3.7了,然后我会被卡住进行更改...我想去的好时机我想