Jsonp原理

来源:互联网 发布:紧急域名升级通知 编辑:程序博客网 时间:2024/09/21 06:34

转自:http://justcoding.iteye.com/blog/1366102/

知道跨域问题可以使用jsonp解决,原理理解的不是很清楚

JSONP(JSON with Padding)是一个非官方的协议,它允许在服务器端集成Script tags返回至客户端,通过javascript callback的形式实现跨域访问(这仅仅是JSONP简单的实现形式)。

Jsonp原理: 
首先在客户端注册一个callback, 然后把callback的名字传给服务器。
此时,服务器先生成 json 数据。
然后以 javascript 语法的方式,生成一个function , function 名字就是传递上来的参数 jsonp.
最后将 json 数据直接以入参的方式,放置到 function 中,这样就生成了一段 js 语法的文档,返回给客户端。
客户端浏览器,解析script标签,并执行返回的 javascript 文档,此时数据作为参数,传入到了客户端预先定义好的 callback 函数里.(动态执行回调函数)

实现:

1.

<meta content="text/html; charset=utf-8" http-equiv="Content-Type" /><script type="text/javascript">function jsonpCallback(result) {//alert(result);for(var i in result) {alert(i+":"+result[i]);//循环输出a:1,b:2,etc.}}var JSONP=document.createElement("script");JSONP.type="text/javascript";JSONP.src="http://crossdomain.com/services.php?callback=jsonpCallback";document.getElementsByTagName("head")[0].appendChild(JSONP);</script>
2.

<meta content="text/html; charset=utf-8" http-equiv="Content-Type" /><script type="text/javascript">function jsonpCallback(result) {alert(result.a);alert(result.b);alert(result.c);for(var i in result) {alert(i+":"+result[i]);//循环输出a:1,b:2,etc.}}</script><script type="text/javascript" src="http://crossdomain.com/services.php?callback=jsonpCallback"></script>
JavaScript的链接,必须在function的下面。

使用JSON的优点在于:
比XML轻了很多,没有那么多冗余的东西。
JSON也是具有很好的可读性的,但是通常返回的都是压缩过后的。不像XML这样的浏览器可以直接显示,浏览器对于JSON的格式化的显示就需要借助一些插件了。
在JavaScript中处理JSON很简单。
其他语言例如PHP对于JSON的支持也不错。
JSON也有一些劣势:
JSON在服务端语言的支持不像XML那么广泛,不过JSON.org上提供很多语言的库。
如果你使用eval()来解析的话,会容易出现安全问题。
尽管如此,JSON的优点还是很明显的。他是Ajax数据交互的很理想的数据格式。




原创粉丝点击