Jsonp
- 缺点:只能get 意味着请求的参数有限。
- Jsonp原理:
ajax请求受同源策略影响,不允许进行跨域请求,而script标签src属性中的链接却可以访问跨域的js脚本,
利用这个特性,服务端不再返回JSON格式的数据,而是返回一段调用某个函数的js代码,
在src中进行了调用,这样实现了跨域。
- 不是用的XMLHttpRequest object对象,用的是script标签。
<script>
function fuc(data){console.log(data.name)}
</script>
<script src="http://www.baidu.com/api.php?callback=fuc"></script>
一般用法
- 首先在客户端注册一个callback, 然后把callback的名字传给服务器。
此时,服务器先生成 json 数据。
- 然后以 javascript 语法的方式,生成一个function , function 名字就是传递上来的参数 jsonp.
- 最后将 json 数据直接以入参的方式,放置到 function 中,这样就生成了一段 js 语法的文档,返回给客户端。
- 客户端浏览器,解析script标签,并执行返回的 javascript 文档,此时数据作为参数,传入到了客户端预先定义好的 callback 函数里.(动态执行回调函数)
)
深刻理解
- 如果和服务端指定好了前端要执行的函数,就无需参数带callback,只要返回函数片段,浏览器自会执行该函数(该函数必须在在前台找到)