-
JSONP(JSON with Padding)是一种非官方跨域数据交互协议,它允许在服务器端集成< script >标签返回至客**户端,通过javascript回调的形式实现跨域访问。
-
因为同源策略的原因,我们不能使用XMLHttpRequest与外部服务器进行通信,但是< script >可以访问外部资源,所以通过JSON与< script >相结合的办法,可以绕过同源策略从外部服务器直接取得可执行的JavaScript函数。
原理
-
客户端定义一个函数,比如jsonpCallback,然后创建< script >,src为url + ?jsonp=jsonpCallback这样的形式,之后服务器会生成一个和传递过来jsonpCallback一样名字的参数,并把需要传递的数据当做参数传入,比如jsonpCallback(json),然后返回给客户端,此时客户端就执行了这个服务器端返回的jsonpCallback(json)回调。
-
通俗的说,就是客户端定义一个函数然后请求,服务器端返回的javascript内容就是调用这个函数,需要的数据都当做参数传入这个函数了。
-
优点 - 兼容性好,简单易用,支持浏览器与服务器双向通信
-
缺点 - 只支持GET请求;存在脚本注入以及跨站请求伪造等安全问题
*** 补充一点,JSONP不使用XMLHttpRequest对象加载资源,不属于真正意义上的AJAX。