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

Phonegap跨域AJAX POST请求在Android上不起作用

利博远
2023-03-14
问题内容

跨域AJAX POST请求在Web浏览器(包括手机上的浏览器)上可以很好地工作,但不适用于使用以下工具构建的本机应用程序 Phonegap

我创建了一个登录表单,用户必须输入他们的登录凭据,然后由heroku上托管的服务器对其进行验证,{"success":true}如果输入了有效的凭据,则返回json

我的Ajax脚本:

$.ajax({
   type: "POST",
   url: "http://domain.com/public/auth/app-login",
   contentType: "application/x-www-form-urlencoded; charset=utf-8",
   dataType: "json",
   data: {identity: <username from form>, password: <password from form>},
   crossDomain: true,
   cache: false,
   success: function(data) {
       obj = JSON.parse(data);
       if (obj && obj.success === true) {
          window.location.href = 'home.html';
       }
   },
   error: function(e) {
       alert('Error: ' + e.message);
   }
});

解决此问题所采取的步骤:

  • 域白名单 -config.xml

<access origin="http://domain.com/public/auth/app-login" />

<access origin="*" />

  • 告诉jQuery允许跨域

$.support.cors = true; 要么 jQuery.support.cors = true;

  • 禁用缓存 cache: false

任何帮助表示赞赏。


问题答案:

好。如果index.html位于本地,则可以调用ajax任何主机,而无需在客户端或服务器中启用CORS。您删除:

$.support.cors = true; OR jQuery.support.cors = true;

和:

<access origin="http://domain.com/public/auth/app-login" />

它多余,只能使用:

<access origin="*" />

您需要检查并添加AndroidManifest.xml:

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

如果您的应用需要添加更多权限。最后,在$(document).ready()内部调用ajax:

$.ajax({
   type: "POST",
   url: "http://domain.com/public/auth/app-login",
   dataType: "json",
   data: {identity: <username from form>, password: <password from form>},
   success: function(data) {
     obj = JSON.parse(data);
     if (obj && obj.success === true) {
        window.location.href = 'home.html';
     }
   },
   error: function(e) {
     alert('Error: ' + e.message);
   }
});


 类似资料:
  • 问题内容: 我正在为Android创建一个PhoneGap应用。为了从(远程)服务器获取数据,我使用jQuery的$ .ajax()函数进行了REST调用。您必须了解几件事: 通话类型必须为POST 服务器需要JSON数据(至少用户名和密码) 服务器发回JSON数据 代码: 但是,这不起作用。当我使用Firebug查看服务器响应时,什么都没有。使用TcpTrace,我可以看到请求的标头。除了期望的

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

  • 问题内容: 我正在使用PhoneGap和JavaScript来生成iPhone应用程序。是否可以发送跨域AJAX(POST)请求并将响应下载为HTML?(例如:登录yahoo邮件并提取新邮件) 问题答案: Cordova / PhoneGap允许将域列入白名单。只要您请求的服务器在白名单中即可。

  • 问题内容: 我正在使用此页面 -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

  • 我到处都搜索了,但找不到答案,我怎么能发出HTTP请求?我尝试了几种可能性,但都不起作用。我总是出错。 02-27 17:52:58.611 13571-13571/com.example.app E/AndroidRuntime﹕ 致命异常:主java.lang.IllegalStateException:无法在android.view.view$1.onClick(view.java:3838

  • 在浏览器的沙箱环境下,默认只允许js代码请求其所属域的数据,不同域名/ip/协议,都默认禁止. 跨域所需要的是,是响应浏览器发起的OPTIONS,及真正的GET/POST, 共2个请求哦. 所需要的逻辑CrossOriginFilter已经封装好了 如何解决 nutz给出的方案非常简单,仅需要在入口方法上添加CrossOriginFilter即可 @Filters(@By(type=CrossO