我正在为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’
>尝试使用Cross-Origin Resource Sharing (CORS)
该问题与同源起始策略有关,但这不适用于文件://协议PhoneGap用于加载本地html文件。
在我的AndroidManifest.xml文件中,该选项
<uses-permission android:name="android.permission.INTERNET" />
被设置。
我现在想解决这个问题了2天,但到现在为止没有结果。这甚至可以做吗?你有什么技巧我可以继续吗?
提前致谢!