当前位置:文档之家› js_跨域访问

js_跨域访问

js_跨域访问
js_跨域访问

js跨域

什么引起了ajax不能跨域请求的问题?

ajax本身实际上是通过XMLHttpRequest对象来进行数据的交互,而浏览器出于安全考虑,不允

许js代码进行跨域操作,所以会警告。

有什么完美的解决方案么?

解决方案有不少,但是只能是根据自己的实际情况来选择。

跨域的安全限制都是指浏览器端来说的,服务器端是不存在跨域安全限制的。所以针对这2种情况

衍生出2类跨域解决方案,一类是服务器端做中转类似代理方式,一类是js处理浏览器端的真正跨

域访问。

具体情况有:

1)本域和子域的相互访问: https://www.doczj.com/doc/aa14114058.html,和https://www.doczj.com/doc/aa14114058.html,用document.domain =

"https://www.doczj.com/doc/aa14114058.html,";

2)本域和其他域的相互访问: https://www.doczj.com/doc/aa14114058.html,和https://www.doczj.com/doc/aa14114058.html, 用XMLHttpRequest访问代理,

既服务器端代理方式

3)本域和其他域的相互访问: https://www.doczj.com/doc/aa14114058.html,和https://www.doczj.com/doc/aa14114058.html, 用 JS创建动态脚本,

https://www.doczj.com/doc/aa14114058.html,/b.jsp页面代码如下:

$(param.jsoncallback)({"name": "Zhang Huihua", "QQ": "350863780"})

b.jsp页面通过$(param.jsoncallback)得到浏览器端随后要回调的js function name:myTest

实际上客户端接收到的response如下:myTest({"name": "Zhang Huihua", "QQ": "350863780"})

jQuery浏览器端跨域访问

目前jQuery$.ajax()支持get方式的跨域,这其实是采用jsonp的方式来完成的。其原理就是

上面第三种方式,是一致的(qq空间就是大量采用这种方式来实现跨域数据交换的) .JSONP是一种脚本注入(Script Injection)行为,所以也有一定的安全隐患.

注意,jquey是不支持post方式跨域的.

虽然采用post +动态生成iframe是可以达到post跨域的目的(有位js牛人就是这样把

jquery1.2.5 打patch的),但这样做是一个比较极端的方式,不建议采用.

也可以说get方式的跨域是合法的,post方式从安全角度上,被认为是不合法的, 万不得已还是不

要剑走偏锋..

浏览器端跨域访问的需求看来也引起w3c的注意了,看资料说html5 WebSocket标准支持跨域

的数据交换,应该也是一个将来可选的跨域数据交换的解决方案.

jQuery Ajax 全解析(.ajax .post .get)

jQuery Ajax 全解析【.ajax .post .get】 1. load( url, [data], [callback] ) :载入远程 HTML 文件代码并插入至 DOM 中。 url (String) : 请求的HTML页的URL地址。 data (Map) : (可选参数) 发送至服务器的 key/value 数据。 callback (Callback) : (可选参数) 请求完成时(不需要是success的)的回调函数。 这个方法默认使用 GET 方式来传递的,如果[data]参数有传递数据进去,就会自动转换为POST方式的。jQuery 1.2 中,可以指定选择符,来筛选载入的 HTML 文档,DOM 中将仅插入筛选出的 HTML 代码。语法形如 "url #some > selector"。 这个方法可以很方便的动态加载一些HTML文件,例如表单。 示例代码: $(".ajax.load").load("https://www.doczj.com/doc/aa14114058.html,/QLeelulu/archive/2008/03 /30/1130270.html .post", function (responseText, textStatus, XMLHttpRequest){ this;//在这里this指向的是当前的DOM对象,即 $(".ajax.load")[0] //alert(responseText);//请求返回的内容 //alert(textStatus);//请求状态:success,error //alert(XMLHttpRequest);//XMLHttpRequest对象 }); 注:不知道为什么URL写绝对路径在FF下会出错,知道的麻烦告诉下。下面的get()和post()示例使用的是绝对路径,所以在FF下你将会出错并不会看到返回结果。还有get()和post()示例都是跨域调用的,发现传上来后没办法获取结果,所以把运行按钮去掉了。 2. jQuery.get( url, [data], [callback] ):使用GET方式来进行异步请求 参数: url (String) : 发送请求的URL地址.

跨域获取cookie,多个网站实现一键登录

A网站首页PHP(也可以在登录页面加入下面的代码)加入如下代码 view plaincopy to clipboardprint? 1. A网站增加文件getcookies.php,目的是为了让B网站可以以ajax方式来查询A网站的cookie getcookies.php 代码如下 view plaincopy to clipboardprint? 1.$winduid,'msg'=>$msg)); 4.//可以用json_encode自动转换,也可以手写json格 式 $json_data = '{"mywinduid":'.$mywinduid.'}'; 5.$json_data = json_encode(array('mywinduid'=>$mywinduid)); 6.//必需以下这样形式输出,重点就是发送请求的网页的参数中要有jsoncallback参 数 7.echo $callback.'('.$json_data.')'; 8.?> 在需要查询A网站cookie的B网站页面中增加如下代码 view plaincopy to clipboardprint? 1. 2.

jQuery中的Ajax几种请求方法

jQuery确实是一个挺好的轻量级的JS框架,能帮助我们快速的开发JS应用,并在一定程度上改变了我们写JavaScript代码的习惯。 废话少说,直接进入正题,我们先来看一些简单的方法,这些方法都是对jQuery.ajax()进行封装以方便我们使用的方法,当然,如果要处理复杂的逻辑,还是需要用到jQuery.ajax()的(这个后面会说到). 1. load( url, [data], [callback] ) :载入远程HTML 文件代码并插入至DOM 中。 url (String) : 请求的HTML页的URL地址。 data (Map) : (可选参数) 发送至服务器的key/value 数据。 callback (Callback) : (可选参数) 请求完成时(不需要是success的)的回调函数。 这个方法默认使用GET 方式来传递的,如果[data]参数有传递数据进去,就会自动转换为POST方式的。jQuery 1.2 中,可以指定选择符,来筛选载入的HTML 文档,DOM 中将仅插入筛选出的HTML 代码。语法形如"url #some > selector"。 这个方法可以很方便的动态加载一些HTML文件,例如表单。 示例代码: $(".ajax.load").load("[url]https://www.doczj.com/doc/aa14114058.html,/QLeelulu/archive/2008/03/30/1130270.html[/url] .post", function (responseText, textStatus, XMLHttpRequest){ this;//在这里this指向的是当前的DOM对象,即$(".ajax.load")[0] //alert(responseText);//请求返回的内容 //alert(textStatus);//请求状态:success,error //alert(XMLHttpRequest);//XMLHttpRequest对象 }); 这里将显示结果。 注:不知道为什么URL写绝对路径在FF下会出错,知道的麻烦告诉下。下面的get()和post()示例使用的是绝对路径,所以在FF下你将会出错并不会看到返回结果。还有get()和post()示例都是跨域调用的,发现传上来后没办法获取结果,所以把运行按钮去掉了。 2. jQuery.get( url, [data], [callback] ):使用GET方式来进行异步请求 参数: url (String) : 发送请求的URL地址. data (Map) : (可选) 要发送给服务器的数据,以Key/value 的键值对形式表示,会做为QueryString附加到请求URL中。 callback (Function) : (可选) 载入成功时回调函数(只有当Response的返回状态是success才是调用该方法)。 这是一个简单的GET 请求功能以取代复杂$.ajax 。请求成功时可调用回调函数。如果需要在出错时执行函数,请使用$.ajax。示例代码: $.get("./Ajax.aspx", {Action:"get",Name:"lulu"}, function (data, textStatus){ //返回的 data 可以是 xmlDoc, jsonObj, html, text, 等等. this; // 在这里this指向的是Ajax请求的选项配置信息,请参考下图

解决js跨域问题

JSONP(JSON With Padding),就是打包在函数调用中的的JSON(或者包裹的JSON)。AJAX和JSONP在jQuery中的调用方式看起来极为相像,千万不要被这种现象迷惑,它们本质上有很大不同。AJAX是通过XMLHttpRequest对象获取非页面内容,而JSONP是动态的添加