基本原理
基本原理:
主要就是利用了 script 标签的src不受浏览器同源策略的限制。
可以把非同源的JavaScript代码请求到本地,并执行。
执行过程
1、前端定义一个解析函数(如: callback = function (res) {})
2、通过params的形式包装script标签的请求参数,并且声明执行函数(如callback = fn)
3、后端获取到前端声明的执行函数(callback),并以带上参数且调用执行函数的方式传递给前端
4、前端在script标签返回资源的时候就会去执行callback并通过回调函数的方式拿到数据了。
分析
1.把非同源的JavaScript代码请求到本地,并执行:
2. 如果请求回来的JavaScript代码只包含函数的调用,则需要程序员手动定义show方法:
缺点:服务器响应回来的代码中,调用的函数的函数名是写死的!
3.在指定的script标签的src属性时,可以通过查询参数中的callback,自定义回调函数的名称:
4.在指定script标签的src属性时,还可以通过查询参数的方式,指定要发送给服务器的数据:
优缺点
优点:兼容性好,在一些较老版本的浏览器中也可以运行
缺点:只能进行get请求
注:
jsonp功能的实现需要前后端的配合使用
通过script标签的src 请求的资源,默认会按js语法来解析
解决面试时回答
1.本质是利用了script标签的src属性的天然跨域特性。
2.它向后台接口发起请求,传递一个前台页面拥有的函数名称,后台返回函数的调用形式,并拼接数据,前台页面拼接后台返回的内容,会以js语法来解析。
3.它与异步对象没有任何的关系。
4.它只能发起get请求,并且它严重的依赖服务器的配置。