JSONP的原理
2015-10-19 20:41
666 查看
今天学习了下跨域的解决方式之一:JSONP。趁着热乎,赶紧写下。如果以后忘记了,可以随时翻阅。现在越来越发现随手写笔记的好处了,因为很多知识,学习了,当时你记得很清楚。可是知识这东西不像吃饭,一天三顿。过一段时间不用,就会忘记(真是吃大亏了)。好了,废话少说,进入正题。
JSON是一种数据格式,被原生JS支持。JSONP和JSON也有一点关系,后面再说。先来谈谈JS。大家都知道script的src可以引入不同域的JS(所有具有src的属性都可以),JSONP就是建立在此基础上的。先看下面一个例子
哈哈,其实也是本地callback函数的调用,不同的是:是通过script引入的外部函数。到这里,大家有没有想到什么?没错,如果jsonp.js引入的是不同域的js,我们本地通过声明相同的函数,后面再调用,那么我们就可以获得不同域的数据了。但是有个问题,怎么让远程服务器知道本地函数的名字呢。答案是我们可以加参数的方式实现。
例如:<script src="http://www.XXX.com/jsonp.js?callback=jsonpCallBack"></script>
通过这种传参的方式告知服务器函数的名字,然后后台就可以根据此名字返回相应的调用函数
(其实就是拼接字符串)。
借鉴:http://kb.cnblogs.com/page/139725/
JSON是一种数据格式,被原生JS支持。JSONP和JSON也有一点关系,后面再说。先来谈谈JS。大家都知道script的src可以引入不同域的JS(所有具有src的属性都可以),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> <meta content="text/html; charset=utf-8" http-equiv="Content-Type" /> <body> <script> var callback = function(data) { console.log(data.result); }; callback({"result":"本地代码"}); </script> <script src="jsonp.js"></script> </body> </html>很正常的一个函数声明,并且调用。先别急,重点在后面。下面放jsonp.js的代码:
callback({"result":"后台代码"});
哈哈,其实也是本地callback函数的调用,不同的是:是通过script引入的外部函数。到这里,大家有没有想到什么?没错,如果jsonp.js引入的是不同域的js,我们本地通过声明相同的函数,后面再调用,那么我们就可以获得不同域的数据了。但是有个问题,怎么让远程服务器知道本地函数的名字呢。答案是我们可以加参数的方式实现。
例如:<script src="http://www.XXX.com/jsonp.js?callback=jsonpCallBack"></script>
通过这种传参的方式告知服务器函数的名字,然后后台就可以根据此名字返回相应的调用函数
(其实就是拼接字符串)。
借鉴:http://kb.cnblogs.com/page/139725/
相关文章推荐
- JavaScript创建cookie
- JavaScript高级程序设计第25章(新兴的API)
- javascript之DOM操作
- javascript入门
- JavaScript 开发的45个经典技巧
- HTML学习记录<八> :嵌入JavaScript的位置
- 通过json序列化方式在django下传递模型数据
- jsp el表达式
- 认识js中的function和this
- JS实现文本框和文本域获取焦点focus()时,光标在本文的末尾
- FastJson使用
- JavaScript的Ajax数据请求与浏览器兼容
- 本地部署ArcGIS API for JavaScript
- js中prototype用法(转)
- js去除字符串中重复的编号,并删除自己的编号
- js处理字符串的substr()slice()substring()match()replace()用法
- js中的fadeIn()
- js保留两位小数点
- JS转换Date日期格式
- JSON使用