【问题标题】:My PhoneGap app cannot access my Web Service我的 PhoneGap 应用程序无法访问我的网络服务
【发布时间】:2015-05-27 17:15:09
【问题描述】:

我正在为我在社区 phoneGap 网站上发布的问题寻求帮助:

http://community.phonegap.com/nitobi/topics/my-phonegap-app-cannot-access-my-web-service?rfm=1

但基本上总而言之,我正在用我的 phoneGap 应用程序慢慢测试水域,我想访问我服务器上的 JSON 文件并解析它并在我的应用程序中发出警报。到目前为止,我无法让它工作。

我尝试过的事情: 1)在我的phoneGap文件的config.xml文件中,我有以下标签:access origin="http://104.236.6.175" subdomains="true"

2) 使用 JavaScript 访问 JSON 文件的多种不同方式,但目前这是我的代码:

$("#requestJSON").click(function () {
    var xmlhttp = new XMLHttpRequest();
    var url = "http://104.236.6.175/test/test1.json";

    xmlhttp.onreadystatechange = function() {
    if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
      var myArr = JSON.parse(xmlhttp.responseText);
      myFunction(myArr);
     }
    }

    xmlhttp.open("GET", url, true);
    xmlhttp.send();
    function myFunction(arr) {
    var out = "";
    var i;
    for(i = 0; i < arr.length; i++) {
    out += '<a href="' + arr[i].url + '">' +
    arr[i].display + '</a><br>';
    }

    alert(out);
    $("#resultLog").html(out);
    }


    });

非常感谢任何帮助。谢谢。

【问题讨论】:

  • 你为什么不使用 $.ajax 或 $.get 或 $.getJSON 来处理你的 http 请求?您使用的是哪个版本的 phonegap,您是否在 config.xml 中配置了“访问源”?如果使用最新版本,您是否包含了 cordova-plugin-whitelist 插件?您是否检查过应用程序的日志以查看是否有消息?
  • 嗨。我从来没有真正让我的网络服务工作。我不知道我做错了什么。我选择做的是在我的 android 手机上提供本地存储的 JSON 文件,并使用 JQuery 使用 Ajax 脚本将其解析出来。它似乎正在工作。
  • 这里是一个例子:stackoverflow.com/questions/6417055/…

标签: javascript android json cordova phonegap-build


【解决方案1】:

我看到你正在使用 jQuery。如果你还在为你的 UI 框架使用 jQuery Mobile,你需要在收到 deviceready 通知后调用$.mobile.allowCrossDomainPages = true;。您也可以将访问标签设置为&lt;access origin="*" /&gt; 以允许所有内容并稍后对其进行微调。

此外,使用 jQuery 访问返回的 JSON 数据的更简洁的方式可能是这样的:

$.get("http://104.236.6.175/test/test1.json", function (data, status) {
    var arr = JSON.parse(data);
});

【讨论】:

  • 非常感谢您抽出宝贵时间。我尝试了你所有的建议,但我仍然迷路。我不知道我做错了什么。我觉得我已经尽力在应用程序方面尽我所能。我几乎觉得服务器端有一些我不关心的东西。你还有什么想法吗?再次感谢。
【解决方案2】:

我快速浏览了您在 phonegap 社区论坛上的帖子,因为在您有机会回答我的问题之前,我会很生气几周,我会在这里给您一些提示。

首先,尝试使用

<access origin="*" />

在您的 config.xml 中。这可能不是最安全的方案,但我建议在事情不工作时使用 *,然后通过限制到您需要的域来更安全。

在最新版本的 cordova/phonegap 中,您需要拥有插件“cordova-plugin-whitelist”才能访问远程服务器。没有这个,所有的通讯都会被切断。

如果我没记错的话,你应该在config.xml中添加这一行来添加插件(我不再使用build,所以我无法检查):

<gap:plugin name="cordova-plugin-whitelist" source="npm"/>

在最新的 cordova/phonegap hereherehere 中了解有关此更改的更多信息。

最后,要获取有关正在发生的事情的更多信息,访问日志很有用。您可以通过单击 phonegap build 中的调试复选框或在您的计算机上使用 adb logcat(需要允许在您的设备上进行 USB 调试,并且可能在您的计算机上安装驱动程序)来使用 weinre 来做到这一点。如果这样做,您可能会收到一条很好的错误消息,告诉您发生了什么事。

【讨论】:

  • &lt;access origin="*"&gt;&lt;/access&gt; 标签解决了我的问题。谢谢!
猜你喜欢
  • 1970-01-01
  • 2014-09-25
  • 2014-10-29
  • 1970-01-01
  • 1970-01-01
  • 2012-01-11
  • 1970-01-01
  • 1970-01-01
  • 2013-08-16
相关资源
最近更新 更多