同源政策下使用JSONP实现跨域访问
1. 同源政策
2. JSONP
2.1 JSONP原理及步骤说明
2.2 JSONP代码示例本地客户端的代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<script type="text/javascript"> // 得到航班信息查询结果后的回调函数 var flightHandler = function(data){ alert('你查询的航班结果是:票价 ' + data.price + ' 元,' + '余票 ' + data.tickets + ' 张。'); }; // 提供jsonp服务的url地址(不管是什么类型的地址,最终生成的返回值都是一段javascript代码) var url = "http://flightQuery.com/jsonp/flightResult.aspx?code=CA1998&callback=flightHandler"; // 创建script标签,设置其属性 var script = document.createElement('script'); script.setAttribute('src',url); // 把script标签加入head,此时调用开始 document.getElementsByTagName('head')[0].appendChild(script); </script>
</head>
<body>
</body>
</html>
可以看到,本地客户端在请求的时候就将需要调用的方法名告诉了服务器,只等它返回一段调用该方法的JS代码片段即可。恰巧的是,该JS代码片段是以JSON格式传输的。 flightHandler({
"code": "CA1998","price": 1780,"tickets": 5 });
对,没错,上面就是json格式的返回数据。然后本地客户端得到该数据后发现是JS代码片段!执行喽!怎么执行?查找名字为flightHandler的函数啊!客户端需要的数据都在参数中,接下来看你flightHandler的函数怎么处理了。 当然,可以使用JQUERY简化使用JSONP的过程: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title>Untitled Page</title>
<script type="text/javascript" src=jquery.min.js"></script>
<script type="text/javascript"> jQuery(document).ready(function(){ $.ajax({ type: "get",async: false,url: "http://flightQuery.com/jsonp/flightResult.aspx?code=CA1998",dataType: "jsonp",jsonp: "callback",//传递给请求处理程序或页面的,用以获得jsonp回调函数名的参数名(一般默认为:callback) jsonpCallback:"flightHandler",//自定义的jsonp回调函数名称,默认为jQuery自动生成的随机函数名,也可以写"?",jQuery会自动为你处理数据 success: function(json){ alert('您查询到航班信息:票价: ' + json.price + ' 元,余票: ' + json.tickets + ' 张。'); },error: function(){ alert('fail'); } }); }); </script>
</head>
<body>
</body>
</html>
可以看到,本地客户端必须将支持JSONP的服务器接口赋给url属性,然后将 3. 参考http://www.cnblogs.com/dowinning/archive/2012/04/19/json-jsonp-jquery.html (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 尝试在C#/ ASP.NET / IIS 7.5 / Win7环境中调用命令提示符
- C#.net无法为内联if语句中的变量赋值null
- ruby-on-rails – rails refinerycms s3上传错误
- swift – 这种类型错误的原因是什么?
- react-native – Redux reducer不会更新immutable.js Redux
- ajax – @RequestBody无法工作 – 返回Http状态415 Jquery中
- ruby-on-rails – 在表单中添加bootstrap-datepicker-rails
- ios – 如何将图像转换为PVRTC格式
- UML关系(泛化,实现,依赖,关联(聚合,组合))
- flex – 什么是Spark列表中的itemChangeEffect等价物?