【问题标题】:How do I call a server api from my phonegap app?如何从我的 phonegap 应用程序调用服务器 api?
【发布时间】:2012-05-22 01:30:32
【问题描述】:

我很难理解一些我确信是非常基本的东西。我到处搜索,找不到解决问题的方法。

我发现的最相关的 stackoverflow 问题是这个:How do I call remote API using Phonegap for Android?

那个帖子看起来很有希望,但对我来说仍然不起作用。我正在构建我的第一个 PhoneGap 应用并尝试使用 Grouped api。

我不明白如何从 PhoneGap 发送和接收数据。我在本地构建所有东西,所以我想这在技术上与 PhoneGap 无关。

这是我的 api 调用:

http://grouped.com/api?f=user_exists&email=ryan@ensomniac.com

应该返回

{"msg": true}

但我在本地测试时得到的只是带有空数据的“错误 200”。我感觉像这样的人:

http://www.youtube.com/watch?list=UU4_bwov47DseacR1-ttTdOg&feature=player_detailpage&v=GsqUZkmO-zk

我正在从 'localhost' 在 Linux 上的 Firefox 10.0.1 中进行测试。我假设在本地运行与 PhoneGap 尽可能相似,但可能是错误的。

这是我现在拥有的代码,我认为应该可以工作(但显然不行):

function makeRequest() {
    var request = new XMLHttpRequest();
    request.open("GET", "http://www.grouped.com/api?f=user_exists&email=ryan@ensomniac.com", true);
    request.onreadystatechange = function() {
        if (request.readyState == 4) {
            if (request.status == 200 || request.status == 0) {
                console.log(request);
            }
        }
    }
    request.send();
}
makeRequest();

我做错了什么?

始终感谢您的帮助。

【问题讨论】:

    标签: javascript cordova


    【解决方案1】:

    问题是您正在使用 FireFox 中的文件协议进行测试。 FireFox 阻止了您的请求,因为它是 Cross-site XMLHttpRequest。某些版本的 FireFox 将允许您使用enable cross site XHR's,但我很确定这不适用于 10.0.1。

    如果您可以修改服务器使其allows requests from your domain 成为一种解决方案。

    如果您无法访问服务器,那么您应该切换到使用 Chrome 进行开发。如果你像这样启动 Chrome:

    chrome.exe --disable-web-security
    

    您将能够执行跨站点 AJAX 请求。 Chrome 也基于 webkit,因此行为将更接近您在 Android、iOS 和 BB 上看到的,它们都部署了基于 webkit 的浏览器。

    【讨论】:

    • 你说得对。这是我的问题。我发现我可以简单地将 $.post() 与 phoneGap 一起使用,这让我的生活变得非常轻松。谢谢!
    • 酷,你应该接受这个答案,这样人们才能更容易地找到正确的答案。
    • 对不起,我可以发誓我有。
    【解决方案2】:

    我刚刚跑了

    http://www.grouped.com/api?f=user_exists&email=ryan@ensomniac.com

    通过我的网络浏览器并获得正确的 JSON 响应。您的本地主机必须与真实的万维网通信有问题,或者您的代码中的某些内容阻止了响应。不过,我并没有真正查看代码来检查错误。

    【讨论】:

    • 感谢您的回复。我知道该链接有效,但我不确定为什么我在 api 调用下方发布的代码无效。
    • 嗯,这是一个 JSON 响应,您使用的是 XMLHttpRequest。不确定这是否是问题所在。有什么要调查的。您的请求可能需要 XML,但它正在获取 JSON。
    【解决方案3】:

    您可能遇到了跨域限制。你在哪个平台上开发?在 iOS 上,您可能需要在 Cordova.plist 中添加类似的内容:

    <key>ExternalHosts</key>
    <array>
        <key>grouped</key>
        <string>www.grouped.com</string>
    </array>
    

    对于 Android,它有问题,最好的办法是使用 jQuery 和 JSONP。

    【讨论】:

      【解决方案4】:

      您应该使用request.responseText 从服务器获取响应正文。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-04-09
        • 2023-03-03
        • 2020-07-11
        相关资源
        最近更新 更多