wee*_*rd2 19 ajax jquery cross-domain cordova
我正在为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
});
}
Run Code Online (Sandbox Code Playgroud)
但是,这不起作用.当我使用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
Run Code Online (Sandbox Code Playgroud)
我知道这与进行跨域请求有关,但我不知道如何解决问题.我尝试了一些方法来解决它,但没有结果:
该问题还与相同的源策略有关,但这不适用于file://协议PhoneGap用于加载本地html文件.
在我的AndroidManifest.xml文件中,选项
<uses-permission android:name="android.permission.INTERNET" />
Run Code Online (Sandbox Code Playgroud)
已设定.
我现在试图解决这个问题2天,但到目前为止还没有结果.这甚至可能吗?你有什么提示给我,所以我可以继续前进吗?
提前致谢!
Dre*_*man 10
您需要将外部域列入白名单.只需转到xcode中的phonegap/cordova plist文件并添加一个新条目,它的值为*,您可以访问任何网站.
也知道这不会在浏览器中工作.浏览器存在跨域问题,而不是手机短信或移动设备.
我自己解决了这个问题.问题位于网址中,我必须在其中添加域名.我变了
var url = "http://remote/server/rest/call";
至
var url = "http://remote.mydomain.com/server/rest/call";
它的工作原理!
我假设第一个网址应该工作,因为它适用于具有完全相同的网址和设置的iPhone应用程序.它还与双防火墙(Windows和ESET防火墙)有关,我关闭了Windows防火墙.
无论如何,谢谢你的回答!
| 归档时间: |
|
| 查看次数: |
42000 次 |
| 最近记录: |