jquery url检测遇到的jquery跨域问题及JSONP的使用

jsonp的ibm上的资料:

使用 JSONP 实现跨域通信,第 1 部分: 结 合 JSONP 和 jQuery 快速构建强大的

 

跨域限制的原因

 跨域问题存在实际上源于浏览器的同源策略(same origin policy),简单讲,同源就是要求域名,协议,端口三者都一致;而同源策略就是指页面上的脚本不能访问非同源的资源(包括HTTP响应和Cookie);

    很多人会想到一个很熟悉的东西: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}) 注意这里的响应值parseResponse({"Name": "Cheeso", "Rank": 7}),JSONP中URL传入的参数实际上是个回调函数,网站返回的也不是纯JSON数据,如果只有数据,返回后浏览器不会有任何动作。

撇开JQuery,如果自己写JSONP调用,<script src="http://domain2.com/getjson?callback=load"></script>,这时候服返回的数据是类似 load({jsonp数据});(也就是说返回的那个调用函数随着你传入的 callback 而改变。) 这样的javascript代码,调用页面上的load函数,同时把数据传进去。

本文永久地址:https://sjolzy.cn/jquery-jquery-url-encountered-in-cross-domain-detection-of-problems-and-the-use-of-JSONP.html

--EOF--

随机文章

添加新评论