使用的PhoneGap和jQuery不起作用跨域请求(Cross-domain requests u

2019-06-23 15:48发布

我创建了Android上的PhoneGap应用程序。 为了从(远程)服务器上获取数据我做使用jQuery的$。阿贾克斯()函数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

我知道它是与做跨域请求,但我不知道如何解决这个问题。 我试了几件事情要修复它,但没有结果:

  • 在“JSON”代替使用“JSONP”
  • 尝试使用跨来源资源共享(CORS)

这个问题也有一些做同源策略,但这并不适用于file://协议的PhoneGap使用加载本地HTML文件。

在我的AndroidManifest.xml文件的选项

<uses-permission android:name="android.permission.INTERNET" />

设置。

我试图解决这一问题,现在2天,但没有任何结果至今。 这甚至可能做什么? 你对我有什么秘诀,所以我可以继续前进?

提前致谢!

Answer 1:

你需要你的加入白名单外部域。 就到你的PhoneGap /科尔多瓦plist文件在Xcode和添加新条目,有它的价值是*您可以访问任何网站在那里。

也知道,这是不行的在浏览器中。 浏览器已经跨域问题,没有的PhoneGap或移动设备。



Answer 2:

我自己解决了这个问题。 问题是地处网址,在那里我有添加域。 我变了

var url = "http://remote/server/rest/call";

var url = "http://remote.mydomain.com/server/rest/call";

和它的作品!

我认为第一个URL应该工作,因为它的工作原理与精确的相同的URL和设置的iPhone应用程序。 它也是东西做一个双重防火墙(Windows和ESET防火墙),我关闭了Windows防火墙。

无论如何,感谢您的回答!



Answer 3:

添加此到config.xml救了我

<gap:plugin name="com.indigoway.cordova.whitelist.whitelistplugin" version="1.1.1" />
<access origin="*" />
<allow-navigation href="*" />
<allow-intent href="*" />

我感到莫名其妙,为什么任何外部资源没有加载,甚至谷歌地图和我的远程调试工具。 这救了我!



Answer 4:

。JQuery的设置:$ support.cors = TRUE;



Answer 5:

尝试设置dataType:jsonp ,并设置crossDomain:true为你可以使用JSONP跨域Ajax请求。 http://api.jquery.com/jQuery.ajax/

或者你也可以追加回调=? 你的网址。



文章来源: Cross-domain requests using PhoneGap and jQuery doesn't work