javascript - 跟踪特定 XMLHTTPRequest 的完成情况
问题描述
是否可以使用纯 JavaScript 确定特定 XMLHttpRequest 何时完成?假设我知道将使用 XMLHttpRequest 请求的资源的 URL,例如:http://www.mywebsite.com/test.json
我可以使用 JavaScript 跟踪此请求的完成情况吗?
这是我到目前为止的代码:
var oldXHR = window.XMLHttpRequest;
function newXHR() {
var realXHR = new oldXHR();
realXHR.addEventListener("readystatechange", function() {
if(realXHR.readyState==4 && realXHR.status==200){
console.log('request was made');
}
}, false);
return realXHR;
}
window.XMLHttpRequest = newXHR;
但是,这会跟踪网站上发出的每一个 HTTP 请求,并且不是很有用。我想查明确切的请求并确定它何时完成。怎么可能做到这一点?
解决方案
您需要“劫持”(实际上是覆盖)该open()
方法而不是构造函数。
XMLHttpRequest.prototype.open = (function(realOpen) {
return function(method, url) {
if (url === 'http://www.mywebsite.com/test.json') {
this.addEventListener('readystatechange', function() {
// ...do what you have to do
});
}
realOpen.apply(this, arguments);
};
})(XMLHttpRequest.prototype.open);
推荐阅读
- java - Java Keycloak 库在 jar 文件中失败
- mysql - 将数据库(从本地)上传到 MySQL(实时) - 字符集问题
- swift - Swift MFMailComposer 可选标签
- reactjs - 使用 immutability-hepler 更新嵌套数组的最佳方法
- c# - 如何停止 IIS 上的 Hangfire 进程?
- postgresql - 如何在 Ubuntu 18.04 中重启 PostgreSQL
- python - 为什么代码在 Jupyter 中有效而在 Spyder 中无效?
- java - 使用依赖于配置文件中的变量的不同 bean 实现
- java - 使 TestNG 测试依赖于成功完成的测试
- nginx - 阻止对除某些 ip 之外的 nginx url 的访问