JSONP原理
2015-09-25 16:49
375 查看
AJAX在取数据的时候,无法做到跨域,即当前网页的地址和我们要取的数据的地址不在一个域下,因为浏览器都有一个“同源策略”,两个页面的域名必须在同域的情况下,才能允许通信
同源策略:相同域名、相同端口、相同协议
同源策略可以有效的阻止一些危险行为,比如嵌入恶意代码等,但有时候需要进行一些必要的跨域通信,则可以使用一些技术手段来实现,比如JSONP
JSONP原理:(JSON WITH PADDING)
同源策略并不会干涉src指向的路径(<script><iframe><img>等都含有src属性)
例子:
www.aaa.com中
<script type="text/javascript" src="http://www.bbb.com/abc.js"></script>
<script>
function abc(json){
alert(json['name']);
}
</script>
www.bbb.com/abc.js中
abc({'name':'Jack','age':'24'});
//页面会弹出Jack
我们可以取到www.bbb.com/abc.js里面的一个abc函数,这个函数被加载到www.aaa.com中,加载完成后,就应该执行abc函数,然后我们在www.aaa.com中定义abc函数,函数里面是处理数据的语句,就实现了简单的跨域访问数据了
JSONP总结:
1、JSONP是为了传数据而存在的技术,因为AJAX受限于同源策略,所以JSONP通过<script>的src属性不受同源策略的控制,实现其功能
2、本质是创建<script>标签,其src指向我们的数据地址,地址后面附带一个回调函数(callback),然后声明这个回调函数,这样只要一引入上面的<script>标签,就相当于执行了那个回调函数
3、jQuery将JSONP内置在了AJAX里,但是AJAX和JSONP是完全不一样的
同源策略:相同域名、相同端口、相同协议
同源策略可以有效的阻止一些危险行为,比如嵌入恶意代码等,但有时候需要进行一些必要的跨域通信,则可以使用一些技术手段来实现,比如JSONP
JSONP原理:(JSON WITH PADDING)
同源策略并不会干涉src指向的路径(<script><iframe><img>等都含有src属性)
例子:
www.aaa.com中
<script type="text/javascript" src="http://www.bbb.com/abc.js"></script>
<script>
function abc(json){
alert(json['name']);
}
</script>
www.bbb.com/abc.js中
abc({'name':'Jack','age':'24'});
//页面会弹出Jack
我们可以取到www.bbb.com/abc.js里面的一个abc函数,这个函数被加载到www.aaa.com中,加载完成后,就应该执行abc函数,然后我们在www.aaa.com中定义abc函数,函数里面是处理数据的语句,就实现了简单的跨域访问数据了
JSONP总结:
1、JSONP是为了传数据而存在的技术,因为AJAX受限于同源策略,所以JSONP通过<script>的src属性不受同源策略的控制,实现其功能
2、本质是创建<script>标签,其src指向我们的数据地址,地址后面附带一个回调函数(callback),然后声明这个回调函数,这样只要一引入上面的<script>标签,就相当于执行了那个回调函数
3、jQuery将JSONP内置在了AJAX里,但是AJAX和JSONP是完全不一样的
相关文章推荐
- JS设计模式-工厂模式
- 解决IE8以上乱码
- Javascript 保存到本地
- javascript--内置函数
- JS 中如何判断 undefined 和 null
- extjs 表格可复制
- js 与或运算符 || && 妙用
- NetJson 解析字符串
- Javascript立即执行函数
- JavaScript的DOM编程--09--节点的替换
- Javascript立即执行函数
- 0132 jstack(查看线程)、jmap(查看内存)和jstat(性能分析)命令
- coco2d-js 多屏适配相关API
- html jsp中设置select disabled 当修改保存时,后台未读取到数据
- js实现图片上传预览及进度条
- JavaScript的面向对象程序设计
- JSF绑定MB的值后台取不到
- js学习笔记-闭包
- js遍历多重json的方法
- JS设置Cookie,及COOKIE的限制