jsonp
在解决跨域问题时,有一种通过动态创建<script>
标签的形式去请求接口的方式叫做jsonp。
jsonp的优缺点
优点
- 解决跨域
- 兼容性强
- 不用使用XMLHttpRequest
缺点
- 只支持get请求
- 不支持不同域两个页面间如何进行js调用
jsonp的原理
JSONP的最基本的原理是:动态添加一个<script>
标签,而script标签的src属性是没有跨域的限制的。这样说来,这种跨域方式其实与ajax XmlHttpRequest协议无关了。
简述原理与过程:首先在客户端注册一个callback, 然后把callback的名字传给服务器。此时,服务器先生成 json 数据。 然后以 javascript 语法的方式,生成一个function , function 名字就是传递上来的参数 jsonp。最后将 json 数据直接以入参的方式,放置到 function 中,这样就生成了一段 js 语法的文档,返回给客户端。
客户端浏览器,解析script标签,并执行返回的 javascript 文档,此时数据作为参数,传入到了客户端预先定义好的 callback 函数里。(动态执行回调函数)
1 | var script = document.createElement('script'); |
服务端返回如下(返回时即执行全局函数)1
handleCallback({"status": true, "id": "1"})