在网页中,如何拦截AJAX特定请求并进行响应的处理,并且不影响原来的业务逻辑?
const originalXHR = window.XMLHttpRequest;
window.XMLHttpRequest = function() {
const xhr = new originalXHR();
const originalOpen = xhr.open;
const originalSend = xhr.send;
xhr.open = function(method, url) {
this._method = method;
this._url = url;
return originalOpen.apply(this, arguments);
};
xhr.send = function(d) {
this._requestData = d;
const originalOnreadystatechange = this.onreadystatechange;
this.onreadystatechange = function() {
if (originalOnreadystatechange) {
return originalOnreadystatechange.apply(this, arguments);
}
if (this.readyState === 4) {
if (this._url.includes('queryDashboardPageList')) {
console.log('拦截到请求: queryDashboardPageList');
data = JSON.parse(this.responseText);
run();
}
if (this._url.includes('/api/users/all')) {
console.log('拦截到请求: users');
const result = JSON.parse(this.responseText);
result.data.forEach(user => users.set(user.id, user));
}
}
};
return originalSend.apply(this, arguments);
};
return xhr;
};