我正在为Android创建PhoneGap应用程序。要从(远程)服务器获取数据,我使用jQuery的$ .ajax()函数进行REST调用。有几件事你必须知道:使用PhoneGap和jQuery的跨域请求不起作用
- 呼叫的类型必须为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”
- 尝试使用Cross-Origin Resource Sharing (CORS)
的问题也有事可做具有相同的原始策略,但是这不适用于文件://协议PhoneGap用于加载本地html文件。
在我的AndroidManifest.xml文件,
<uses-permission android:name="android.permission.INTERNET" />
设置的选项。
我试图解决这个问题2天,但现在没有结果。这甚至有可能做到吗?你有任何提示给我,所以我可以继续前进吗?
在此先感谢!
您的问题可能已修复,但这不是解决跨域请求问题的答案 – Asqan 2015-09-10 12:15:18