热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

使用PhoneGap和jQuery的跨域请求不起作用-Cross-domainrequestsusingPhoneGapandjQuerydoesn'twork

ImcreatingaPhoneGapappforAndroid.Togetdatafromthe(remote)serverImakeaRESTcallusi

I'm creating a PhoneGap app for Android. To get data from the (remote) server I make a REST call using jQuery's $.ajax() function. There are a few things you must know:

我正在为Android开发一个PhoneGap应用。要从(远程)服务器获取数据,我使用jQuery的$.ajax()函数进行REST调用。有几件事你必须知道:

  • Type of the call must be POST
  • 调用类型必须是POST
  • The server expects JSON data(at least username and password)
  • 服务器需要JSON数据(至少是用户名和密码)
  • The server sends back JSON data
  • 服务器返回JSON数据

The code:

代码:

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
    });
}

But, this doesn't work. When I use Firebug to see the servers response, there is nothing. With TcpTrace I can see the headers of the request. Instead of an expected POST method, there is an OPTIONS method, with some strange headers added.

但是,这是行不通的。当我使用Firebug查看服务器响应时,什么都没有。通过TcpTrace,我可以看到请求的头部。这里有一个选项方法,添加了一些奇怪的标题,而不是预期的POST方法。

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

I know it has something to do with doing cross-domain requests, but I don't know how to solve the problem. I tried a few things to fix it, but with no result:

我知道这与跨域请求有关,但我不知道如何解决这个问题。我尝试了一些方法来修复它,但是没有结果:

  • Use 'jsonp' in stead of 'json'
  • 使用“jsonp”而不是“json”
  • Try to use Cross-Origin Resource Sharing (CORS)
  • 尝试使用跨源资源共享(CORS)

The problem has also something to do with same origin policy, but this does not apply to the file:// protocol PhoneGap is using to load a local html file.

问题还与同源策略有关,但这并不适用于加载本地html文件的// / PhoneGap协议。

In my AndroidManifest.xml file, the option

在我的AndroidManifest。xml文件的选项


is set.

是集。

I'm trying to fix this for 2 days now, but no result till now. Is this even possible to do? Do you have any tips for me so I can move on?

我想把这个问题解决两天,但是到现在还没有结果。这可能吗?你有什么建议给我,这样我就可以继续了吗?

Thanks in advance!

提前谢谢!

5 个解决方案

#1


10  

you need to whitelist your external domains. just go to your phonegap / cordova plist file in xcode and add a new entry, have it's value be * and you can access any website out there.

您需要对外部域进行白名单。在xcode中使用phonegap / cordova plist文件,添加一个新条目,它的值是*,你可以访问任何网站。

also know that this WILL NOT WORK IN A BROWSER. Browsers have crossdomain issues, not phonegap or mobile devices.

还要知道,这在浏览器中是行不通的。浏览器有跨域问题,而不是phonegap或移动设备。

#2


8  

I solved the problem by myself. The problem is located in the url, where I have to add a domain. I changed

我自己解决了这个问题。问题位于url中,我需要添加一个域。我改变了

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

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

to

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

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

and it works!

和它的工作原理!

I assumed the first url should work because it works on an iphone app with exact the same url and settings. It has also something to do with a double firewall(Windows and ESET firewall) where I shut down the Windows firewall.

我假设第一个url应该是可以工作的,因为它可以在一个iphone应用程序上使用相同的url和设置。它还与我关闭Windows防火墙的双防火墙(Windows和ESET防火墙)有关。

Anyway, thanks for your answers!

不管怎样,谢谢你的回答!

#3


3  

Adding this to the config.xml saved me

将其添加到配置中。xml救了我





I was baffled as to why any outside resource did not load, even google maps and my remote debugging tool. This saved me!

我很困惑为什么任何外部资源都不加载,甚至谷歌映射和我的远程调试工具。这救了我!

#4


1  

JQuery setting :$.support.cors = true;

JQuery设置:.support美元。歌珥= true;

#5


0  

Try setting dataType:jsonp and set crossDomain:true For cross domain ajax requests you can use jsonp. http://api.jquery.com/jQuery.ajax/

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

Or you can append callback=? to your url.

或者可以追加callback=?你的url。


推荐阅读
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 本文介绍了使用AJAX的POST请求实现数据修改功能的方法。通过ajax-post技术,可以实现在输入某个id后,通过ajax技术调用post.jsp修改具有该id记录的姓名的值。文章还提到了AJAX的概念和作用,以及使用async参数和open()方法的注意事项。同时强调了不推荐使用async=false的情况,并解释了JavaScript等待服务器响应的机制。 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • 基于PgpoolII的PostgreSQL集群安装与配置教程
    本文介绍了基于PgpoolII的PostgreSQL集群的安装与配置教程。Pgpool-II是一个位于PostgreSQL服务器和PostgreSQL数据库客户端之间的中间件,提供了连接池、复制、负载均衡、缓存、看门狗、限制链接等功能,可以用于搭建高可用的PostgreSQL集群。文章详细介绍了通过yum安装Pgpool-II的步骤,并提供了相关的官方参考地址。 ... [详细]
  • 本文介绍了在rhel5.5操作系统下搭建网关+LAMP+postfix+dhcp的步骤和配置方法。通过配置dhcp自动分配ip、实现外网访问公司网站、内网收发邮件、内网上网以及SNAT转换等功能。详细介绍了安装dhcp和配置相关文件的步骤,并提供了相关的命令和配置示例。 ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 本文详细介绍了解决全栈跨域问题的方法及步骤,包括添加权限、设置Access-Control-Allow-Origin、白名单等。通过这些操作,可以实现在不同服务器上的数据访问,并解决后台报错问题。同时,还提供了解决second页面访问数据的方法。 ... [详细]
  • PHPMailer邮件类邮件发送功能的使用教学及注意事项
    本文介绍了使用国外开源码PHPMailer邮件类实现邮件发送功能的简单教学,同时提供了一些注意事项。文章涵盖了字符集设置、发送HTML格式邮件、群发邮件以及避免类的重定义等方面的内容。此外,还提供了一些与PHP相关的资源和服务,如传奇手游游戏源码下载、vscode字体调整、数据恢复、Ubuntu实验环境搭建、北京爬虫市场、进阶PHP和SEO人员需注意的内容。 ... [详细]
  • WebSocket与Socket.io的理解
    WebSocketprotocol是HTML5一种新的协议。它的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送 ... [详细]
  • PDO MySQL
    PDOMySQL如果文章有成千上万篇,该怎样保存?数据保存有多种方式,比如单机文件、单机数据库(SQLite)、网络数据库(MySQL、MariaDB)等等。根据项目来选择,做We ... [详细]
  • 网络请求模块选择——axios框架的基本使用和封装
    本文介绍了选择网络请求模块axios的原因,以及axios框架的基本使用和封装方法。包括发送并发请求的演示,全局配置的设置,创建axios实例的方法,拦截器的使用,以及如何封装和请求响应劫持等内容。 ... [详细]
  • 本文介绍了一种在PHP中对二维数组根据某个字段进行排序的方法,以年龄字段为例,按照倒序的方式进行排序,并给出了具体的代码实现。 ... [详细]
author-avatar
HVV_Ha8m
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有