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

How do I call a server api from my phonegap app?

本文关键字:调用 服务器 api 应用程序 Phonegap 我的      更新时间:2023-09-26

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

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

那篇帖子看起来很有希望,但仍然对我不起作用。我正在构建我的第一个PhoneGap应用程序,并尝试使用分组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 上的 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();

我做错了什么?

始终感谢您的帮助。

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

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

如果您无权访问服务器,则应切换到使用 Chrome 进行开发。如果您启动 Chrome 时如下所示:

chrome.exe --disable-web-security

您将能够执行跨站点 AJAX 请求。同样,Chrome是基于webkit的,所以行为将更接近你在Android,iOS和BB上看到的内容,它们都部署了基于webkit的浏览器。

我刚刚跑了

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

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

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

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

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

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