当前位置: 首页 > 面试题库 >

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

邓鸿雪
2023-03-14
问题内容

我正在为Android创建一个PhoneGap应用。为了从(远程)服务器获取数据,我使用jQuery的$
.ajax()函数进行了RESThtml" target="_blank">调用。您必须了解几件事:

  • 通话类型必须为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”
  • 尝试使用跨域资源共享(CORS)

该问题也与相同的原始策略有关,但这不适用于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防火墙。

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



 类似资料:
  • 问题内容: 跨域AJAX POST请求在Web浏览器(包括手机上的浏览器)上可以很好地工作,但不适用于使用以下工具构建的本机应用程序 我创建了一个登录表单,用户必须输入他们的登录凭据,然后由heroku上托管的服务器对其进行验证,如果输入了有效的凭据,则返回json 。 我的Ajax脚本: 解决此问题所采取的步骤: 域白名单 -config.xml 告诉jQuery允许跨域 要么 禁用缓存 任何帮

  • 问题内容: 我正在通过jQuery的$ .ajax函数使用的第三方API上调用POST。但是,当我拨打电话时,出现以下错误: 我从这篇文章中看到这可能是Webkit的错误,所以我在Firefox中尝试了此操作(我正在使用Chrome开发),并且得到了相同的结果。 在这篇文章中,我还尝试通过将$.ajax函数的属性设置为并将设置为来使用jsonp。但是,这导致了500个内部服务器错误。 当我使用–d

  • 问题内容: 我正在使用此页面 -http : //ecmazing.com/cors.html-向此资源发出跨域Ajax请求: http //hacheck.tel.fer.hr/xml.pl 它适用于Chrome,Safari和Firefox,但不适用于IE9和Opera。 代码: (预期结果是XML代码字符串。) 自己看看: http : //ecmazing.com/cors.html 在I

  • 问题内容: 我正在尝试向不受控制的域上的API发出一个简单的JSON获取请求。 我的代码很简单: 但这是跨域请求,因此我在Chrome控制台中收到此错误: 当我尝试添加参数时,控制台将返回此错误: 未捕获到的SyntaxError:意外令牌: 但是,当我检查Chrome中的“网络”标签时,我看到“标题”下的状态代码为200 OK,实际上我可以在“响应”标签中看到完整的响应,但控制台仍显示“意外令牌

  • 问题内容: 帮助,如果您可以- 情况: http://foobar.com包含一个远程托管的Javacript文件(http://boobar.com/stuff.js)。 目标是从foobar.com上的远程托管php脚本中获取警报 我在stuff.js中尝试了以下代码: 没运气。 也没有运气。 在php端,我尝试了以下两种方法: 在Firefox中,出现安全错误。我了解它认为我违反了安全模型。

  • 问题内容: 对于一个项目,我需要获取其他不同域的网页的源代码。我尝试了以下代码: 我仍然没有得到任何结果,只是一个空白的警告框。 问题答案: 默认情况下,所有浏览器都限制跨域请求,您可以使用YQL作为代理来解决此问题。在此处查看指南:http://ajaxian.com/archives/using-yql-as-a- proxy-for-cross-domain-ajax