我创建了Android上的PhoneGap应用程序。 为了从(远程)服务器上获取数据我做使用jQuery的$。阿贾克斯()函数REST调用。 还有,你必须知道的几件事情:
- 呼叫的类型必须为POST
- 服务器期待JSON数据(至少用户名和密码)
- 服务器发回的JSON数据
代码:
function makeCall(){
var url = "http://remote/server/rest/call";
var jsonData ='{"username":"'+$('#username').val()+'","password":"'+$('#password').val()+'"}';
$.ajax({
headers: {"Content-Type":"application/json; charset=UTF-8"},
type: "POST",
url: url,
data: jsonData,
dataType: "json",
success: succesFunction,
error: errorFunction
});
}
但是,这是行不通的。 当我使用Firebug看到服务器的响应,没有什么。 随着TcpTrace我可以看到请求的报头。 相反,预期POST方法,还有一个OPTIONS方法,用一些奇怪的标题添加。
OPTIONS /remote/server/rest/call HTTP/1.1
Host: localhost:8081
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:11.0) Gecko/20100101 Firefox/11.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: nl,en-us;q=0.7,en;q=0.3
Accept-Encoding: gzip, deflate
Connection: keep-alive
Origin: null
Access-Control-Request-Method: POST
Access-Control-Request-Headers: content-type
Pragma: no-cache
Cache-Control: no-cache
我知道它是与做跨域请求,但我不知道如何解决这个问题。 我试了几件事情要修复它,但没有结果:
- 在“JSON”代替使用“JSONP”
- 尝试使用跨来源资源共享(CORS)
这个问题也有一些做同源策略,但这并不适用于file://协议的PhoneGap使用加载本地HTML文件。
在我的AndroidManifest.xml文件的选项
<uses-permission android:name="android.permission.INTERNET" />
设置。
我试图解决这一问题,现在2天,但没有任何结果至今。 这甚至可能做什么? 你对我有什么秘诀,所以我可以继续前进?
提前致谢!