微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用PhoneGap和jQuery的跨域请求不起作用

我正在为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天,但到现在为止没有结果。这甚至可以做吗?你有什么技巧我可以继续吗?

提前致谢!

解决方法

您需要将外部网域列入白名单。只要到你的phonegap / cordova plist文件在xcode并添加一个新的条目,它的价值是*,你可以访问任何网站在那里。

也知道这不会在浏览器中工作。浏览器有跨域问题,而不是手机或移动设备。

原文地址:https://www.jb51.cc/jquery/182632.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐