0

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

我发现的最相关的 stackoverflow 问题是:如何使用 Phonegap for Android 调用远程 API?

那篇文章看起来很有希望,但仍然对我不起作用。我正在构建我的第一个 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();

我究竟做错了什么?

谢谢你的帮助,总是。

4

4 回答 4

2

问题是您正在从 FireFox 中的文件协议进行测试。FireFox 阻止您的请求工作,因为它是一个跨站点 XMLHttpRequest。某些版本的 FireFox 将允许您启用跨站点 XHR,但我很确定这不适用于 10.0.1。

如果您可以修改服务器以允许来自您的域的请求,那将是一种解决方案。

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

chrome.exe --disable-web-security

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

于 2012-05-22T13:05:49.170 回答
0

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

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

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

于 2012-05-22T12:50:38.393 回答
0

我刚跑

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

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

于 2012-05-22T01:33:38.783 回答
0

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

于 2013-08-13T10:32:14.870 回答