XMLHttpRequest 拦截处理

XMLHttpRequest 拦截包括两部分

  1. 请求(request)拦截
  2. 请求完(response)拦截

直接上代码

<script>
      class XMLHttp {
        request = function (param) {};
        response = function (param) {};
      }
      let http = new XMLHttp();
      
	// 初始化 拦截XMLHttpRequest
	function initXMLHttpRequest() {
        let open = XMLHttpRequest.prototype.open;
          XMLHttpRequest.prototype.open = function(...args){
            let send = this.send;
            let _this = this
            let post_data = []
            this.send = function (...data) {
              post_data = data;
              return send.apply(_this, data)
            }
            // 请求前拦截
            http.request(args)

            this.addEventListener('readystatechange', function () {
              if (this.readyState === 4) {
                let config = {
                  url: args[1],
                  status: this.status,
                  method: args[0],
                  data: post_data
                }
                // 请求后拦截
                http.response({config, response: this.response})
              }
            }, false)
            return open.apply(this, args);
          } 
      }
 
 	// 初始化页面
	(function () {
        // XMLHttpRequest 拦截
        http.request = function (param) {
        //   console.log(param, "---request");
        };
        http.response = function (res) { 
            console.log(res, "---response");
        }
        // 初始化 XMLHttpRequest
        initXMLHttpRequest();
        
        // 模拟数据请求 (此处写自己要使用的请求)
        // request();

      })();


 </script>

你可能感兴趣的:(前端,JS,javascript)