使用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并添加一个新的条目,它的价值是*,你可以访问任何网站在那里。

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

相关文章

页面搜索关键词突出 // 页面搜索关键词突出 $(function () {...
jQuery实时显示日期、时间 html: &lt;span id=&quot...
jQuery 添加水印 &lt;script src=&quot;../../../.....
中文:Sys.WebForms.PageRequestManagerParserErrorExceptio...
1. 用Response.Write方法 代码如下: Response.Write(&q...
Jquery实现按钮点击遮罩加载,处理完后恢复 思路: 1.点击按...