我正在为Android创建一个PhoneGap应用。为了从(远程)服务器获取数据,我使用jQuery的$ .ajax()函数进行了REST调用。您必须了解几件事:
代码:
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
我知道这与执行跨域请求有关,但是我不知道如何解决该问题。我尝试了一些修复方法,但没有结果:
该问题也与相同的原始策略有关,但这不适用于PhoneGap用于加载本地html文件的file://协议。
在我的AndroidManifest.xml文件中,该选项
<uses-permission android:name="android.permission.INTERNET" />
被设置。
我正在尝试将其修复2天,但到目前为止没有任何结果。这有可能吗?您对我有什么建议,让我继续前进吗?
提前致谢!
我自己解决了这个问题。问题位于网址中,我必须在其中添加域。我变了
var url = "http://remote/server/rest/call";
至
var url = "http://remote.mydomain.com/server/rest/call";
而且有效!
我认为第一个网址应该可以正常工作,因为它可以在具有相同网址和设置的iPhone应用程序上正常工作。它也与双重防火墙(Windows和ESET防火墙)有关,在双重防火墙中,我关闭了Windows防火墙。
无论如何,谢谢您的回答!