我的PhoneGap应用程序无法访问我的Web服务

My PhoneGap app cannot access my Web Service

本文关键字:我的 Web 服务 访问 PhoneGap 应用程序      更新时间:2023-09-26

我正在寻求帮助,因为我在社区phoneGap网站上发布了一个问题:

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

但总的来说,我正在慢慢地用我的phoneGap应用测试水,我想访问服务器上的JSON文件并解析它并在我的应用中发出警报。到目前为止,我不能让这个工作。

我尝试过的事情:1)在我的config.xml文件中,在我的phoneGap文件中,我有以下标签: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);
    }

    });
任何帮助都是非常感激的。谢谢。

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

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

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

我快速浏览了你在phonegap社区论坛上的帖子,因为在你有机会回答我的问题之前我要离开几个星期了,我在这里只给你一些提示。

首先,尝试使用
<access origin="*" />
在config.xml中的

。这可能不是最安全的场景,但我建议在事情不工作时使用*,然后通过限制到您需要的域来确保以后的安全。

在最新版本的cordova/phonegap,你需要有插件"cordova-plugin-whitelist"能够访问远程服务器。没有这个,所有的通信都被切断了。

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

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

关于最新cordova/phonegap更改的更多信息在这里,在这里或在这里。

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