如何从我的phonegap应用程序调用服务器api?

时间:2012-05-22 01:30:33

标签: javascript cordova

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

我找到的最相关的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

我在Linux上从'localhost'测试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 个答案:

答案 0 :(得分:2)

问题是您正在使用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的浏览器。

答案 1 :(得分:0)

我跑了

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

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

答案 2 :(得分:0)

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

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

对于Android来说它是错误的,你最好的选择是使用jQuery和JSONP。

答案 3 :(得分:0)

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