【问题标题】:PhoneGap not issuing AJAX (jsonp) requestPhoneGap 未发出 AJAX (jsonp) 请求
【发布时间】:2013-10-20 11:07:52
【问题描述】:

我整天都在努力解决这个问题,并且到处搜索。可能是我找不到解决方案的那一页......但我已经查看了问题和解决方案,例如:

Ajax call on phonegap not sending request

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

那里的解决方案似乎都没有解决我的问题。

我要做的就是向我的远程服务器发出 AJAX 调用,上传一些参数并下载一些内容。此脚本在浏览器中完美运行,但取决于 Phonegap 中文件的微小更改,要么抛出“超时”错误,要么只是说“错误”。代码如下(AJAX 端点是一个 dev 端点,我将保留它,以便您也可以尝试点击它):

<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 和各种数据类型,但这些都没有任何区别。

Cordova/PhoneGap 中是否还有我遗漏的配置点?

如有任何帮助,我们将不胜感激。

【问题讨论】:

  • Logcat 控制台中是否有异常/错误?你确定 jQuery 库加载成功了吗?首先你应该确保纯 JavaScript 可以工作,然后尝试测试 jQuery 是否正常。
  • JQuery 加载正常,因为它成功地将错误打印到 DOM,并且在 log cat 中没有注意到任何异常。
  • 确保您的应用具有“网络访问”权限。
  • 天哪 - 我不敢相信我没有在清单中正确添加它。感谢您让我再次检查!
  • 网络访问解决了您的问题吗?

标签: javascript android jquery ajax cordova


【解决方案1】:

感谢 @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 库之后放置这个 sn-p:

<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});

希望这对某人有用!

【讨论】:

    【解决方案2】:

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

    我最后一次编译该应用是在 2015 年 4 月。 然后今天做了几个星期,没什么大不了的,遵守它,我所有的ajax请求都失败了。我做了并警告错误字符串,它都说“超时”。

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

    短期解决方案,一旦 3.7 可能不再受支持,然后我将被卡住进行更改......我想是时候去原生了

    【讨论】:

    • 你在这方面有什么进展吗?我通过使用人行横道并将 Chromium 降级到 42x 版本来“解决”它。我对此感觉不太好
    • @msander...不,很遗憾没有。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-18
    • 1970-01-01
    • 2013-02-06
    • 2013-11-23
    • 1970-01-01
    • 2012-12-04
    • 1970-01-01
    相关资源
    最近更新 更多