首页 > 网站 > WEB开发 > 正文

jQuery跨域原理

2024-04-27 14:38:03
字体:
来源:转载
供稿:网友

JQuery 的跨域方法这篇文章作者给出了使用jQuery中的getJSON方法实现跨域的方法;示例代码没有问题,但是作者把getJSON跨域的原理解释成:

“因为getJSON跨域的原理是把? 随机变一个方法名,然后返回执行的,实现跨域响应的目的。”

这个未免草率了一些,是这么回事 ?Firebug里面监控的结果貌似也是这意思,本文试图探究jQuery getJson跨域的原理;

盐从哪儿咸:为什么有跨域的问题

跨域问题存在实际上源于浏览器的同源策略(same origin policy),简单讲,同源就是要求域名,协议,端口三者都一致;而同源策略就是指页面上的脚本不能访问非同源的资源(包括HTTP响应和Cookie);上面给出了维基百科的地址,如果无法正常访问请移步这里:same origin policy

很多人会想到一个很熟悉的东西:document.domain

同源策略有点放松的就是:b.a.com上的页面无法通过a.com的同源验证,但是设置b.a.com页面的document.domain属性为a.com,就可以通过浏览器对a.com的同源检测;但是,document.domain只允许设置成更上级的域名,而不是其它域名,例如c.com就不行; 提到这里很多人都会想到多级域名下共享Cookie的路子就是把Cooki设置成上级域名;在Web2.0的时代,这种本质上同域跨级解决方案远远不能满足我们跨域的需求;

jQuery的解决方案

浏览器会进行同源检查,这导致了跨域问题,然而这个跨域检查还有一个例外那就是HTML的<Script>标记;我们经常使用<Script>的src属性,脚本静态资源放在独立域名下或者来自其它站点的时候这里是一个url;这个url响应的结果可以有很多种,比如JSON,返回的Json值成为<Script>标签的src属性值。这种属性值变化并不会引起页面的影响。按照惯例,浏览器在URL的查询字符串中提供一个参数,这个参数将作为结果的前缀一起返回到浏览器;

看下面的例子:

以下为引用的内容:

<script type="text/javascript"          src="http://domain2.com/getjson?jsonp=parseResponse"> </script>
响应值:parseResponse({"Name": "Cheeso", "Rank": 7})
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表