我正在为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天,但到现在为止没有结果。这甚至可以做吗?你有什么技巧我可以继续吗?
提前致谢!
解决方法
原文地址:https://www.jb51.cc/jquery/182632.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。