mockjs 如何拦截Ajax 请求
时间: 2023-08-29 21:08:10 浏览: 170
Mock.js 可以通过拦截 Ajax 请求来实现生成随机数据并返回的功能,它使用了 XMLHttpRequest 对象的原型链来实现拦截。Mock.js 会重写 XMLHttpRequest 对象的 open() 和 send() 方法,当调用 open() 方法时,Mock.js 会检查 URL 是否符合 Mock.js 的规则,如果符合规则,则会拦截请求并返回 Mock.js 生成的随机数据,否则会继续发起原始的 Ajax 请求。当调用 send() 方法时,Mock.js 会将请求数据传递给 Mock.js 的解析器,并根据数据模板生成随机数据。
具体来说,Mock.js 会通过 XMLHttpRequest 的原型链来重写 open() 和 send() 方法,代码如下:
```javascript
// 保存原始的 XMLHttpRequest 对象
var _XMLHttpRequest = window.XMLHttpRequest;
// 重写 XMLHttpRequest 对象
window.XMLHttpRequest = function() {
// 创建原始的 XMLHttpRequest 对象
var xhr = new _XMLHttpRequest();
// 重写 open() 方法
xhr.open = function() {
// 检查 URL 是否符合 Mock.js 的规则
if (/* URL 符合规则 */) {
// 拦截请求并返回 Mock.js 生成的随机数据
this.responseText = /* Mock.js 生成的随机数据 */;
} else {
// 继续发起原始的 Ajax 请求
_XMLHttpRequest.prototype.open.apply(this, arguments);
}
};
// 重写 send() 方法
xhr.send = function(data) {
// 将请求数据传递给 Mock.js 的解析器,并根据数据模板生成随机数据
this.responseText = /* Mock.js 生成的随机数据 */;
};
// 返回重写后的 XMLHttpRequest 对象
return xhr;
};
```
这样,Mock.js 就可以拦截 Ajax 请求并生成随机数据了。需要注意的是,Mock.js 会影响全局的 XMLHttpRequest 对象,因此在使用 Mock.js 时需要谨慎处理。
阅读全文