我很难理解我确信非常基本的东西。我到处搜索,无法找到问题的解决方案。
我找到的最相关的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();
我做错了什么?
总是感谢您的帮助。
答案 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
从服务器获取响应正文。