我正在为 Android 创建一个 PhoneGap 应用程序。为了从(远程)服务器获取数据,我使用 jQuery 的 $.ajax() 函数进行了 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
我知道这与做跨域请求有关,但我不知道如何解决这个问题。我尝试了一些方法来修复它,但没有结果:
- 使用“jsonp”代替“json”
- 尝试使用跨域资源共享 (CORS)
该问题也与同源策略有关,但这不适用于PhoneGap 用于加载本地html 文件的file:// 协议。
在我的 AndroidManifest.xml 文件中,选项
<uses-permission android:name="android.permission.INTERNET" />
已设置。
我正在尝试修复此问题 2 天,但直到现在还没有结果。这甚至可能吗?你有什么建议可以让我继续前进吗?
提前致谢!