本篇文章给大家分享的内容是关于Mockjs的原理介绍,有着一定的参考价值,有需要的朋友可以参考一下
有一个前后端分离的项目用到过Mockjs,后端提供了数据格式,前端通过模拟接口的返回数据,进行页面的渲染,有一段时间,百思不得其解,这个插件是怎么把ajax请求给拦下来的,网上搜索了一番,资料甚少,未果。
后来有一天,不知道怎么的突然想到,如果把ajax方法请求改写了,在发送请求之前提供一个回调是不是能实现这个功能?
准备环境
从最方便的jquery入手,打算改写$.ajax
需要解决的问题主要有
$.ajax
即将被改写,所以要自己实现一个发送请求的xhr方法(又懒得写封装的ajax方法,于是把$.ajax
缓存起来,以待后用)
如何去匹配将被拦截的请求地址
拦截了请求之后,如何把预先准备好的数据当做请求成功后的数据
代码实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
|
功能检测
以上代码可直接拷贝至控制栏运行,我们可以看到只发送了b请求,a请求被拦截了下来,同时我们也能拿到所预期的数据
至于Mockjs随机数据的功能,我们暂不考虑
之后我也粗略看了下Mockjs源码,它也是改写了jquery和zepto的$.ajax
方法所实现,这就意味着如果是自己用原生js封装的ajax方法,是不能拦截的
如下,是一个原生js的ajax方法,有兴趣可以自己去检测一下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
|
Atas ialah kandungan terperinci 关于Mockjs的原理介绍. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!