前端过滤Ajax请求-Ajax代理

1 篇文章 0 订阅
;(function(){
    if(typeof window.CustomEvent === 'function') return false;

    function CustomEvent(event, params) {
        params = params || {bubbles: false, cancelable: false, detail: undefined};
        var evt = document.createElement('CustomEvent');
        evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);
        return evt;
    }

    CustomEvent.prototype = window.Event.prototype;

    window.CustomEvent = CustomEvent;
})();

;(function(){
    function ajaxEventTrigger(event) {
        var ajaxEvent = new CustomEvent(event, {detail: this});
        window.dispatchEvent(ajaxEvent);
    }

    var oldXHR = window.XMLHttpRequest;

    function newXHR() {
        var realXHR = new oldXHR();
        realXHR.addEventListener('abort', function() {
            ajaxEventTrigger.call(this, 'ajaxAbort');
        }, false);
        realXHR.addEventListener('error', function() {
            ajaxEventTrigger.call(this, 'ajaxError');
        }, false);
        realXHR.addEventListener('load', function() {
            ajaxEventTrigger.call(this, 'ajaxLoad');
        }, false);
        realXHR.addEventListener('loadstart', function() {
            ajaxEventTrigger.call(this, 'ajaxLoadStart');
        }, false);
        realXHR.addEventListener('progress', function() {
            ajaxEventTrigger.call(this, 'ajaxProgress');
        }, false);
        realXHR.addEventListener('timeout', function() {
            ajaxEventTrigger.call(this, 'ajaxTimeout');
        }, false);
        realXHR.addEventListener('loadend', function() {
            ajaxEventTrigger.call(this, 'ajaxLoadEnd');
        }, false);
        realXHR.addEventListener('readystatechange', function() {
            ajaxEventTrigger.call(this, 'ajaxReadyStateChange');
        }, false);

        let send = realXHR.send;
        realXHR.send = function (...arg) {
            var ret = send.apply(realXHR, arg);
            realXHR.body = arg[0];
            ajaxEventTrigger.call(realXHR, 'ajaxSend');
            return ret;
        }

        let realOpen = realXHR.open;
        realXHR.open = function (...arg) {
            var ret = realOpen.apply(realXHR, arg);
            realXHR.method = arg[0];
            realXHR.originUrl = arg[1];
            realXHR.async = arg[2];
            ajaxEventTrigger.call(realXHR, 'ajaxOpen');
            return ret;
        }

        let setRequestHeader = realXHR.setRequestHeader;
        realXHR.requestHeader = {};
        realXHR.setRequestHeader = function (name, value) {
            realXHR.requestHeader[name] = value;
            return setRequestHeader.call(realXHR, name, value);
        }

        return realXHR;
    }

    window.XMLHttpRequest = newXHR;
})();

(function(){
    var filterList;
    function getJson(xhr) {
        try {
            if(xhr.responseText){
                return JSON.parse(xhr.responseText);
            }else{
                return JSON.parse(xhr.response);
            }
        } catch (error) {
            console.error(error);
            return null;
        }
    }

    function resetResponse(xhr, result) {
        Object.defineProperty(xhr, 'responseText', {
            writable: true
        }); /* 更改responseText 只读属性为可编辑属性。 */
        xhr.responseText = result;
    }

    window.addEventListener("ajaxReadyStateChange", function(e) {
        let proxyXHR = e.detail;
        if(proxyXHR.readyState === 4 && proxyXHR.status === 200){
            /* 在这里过滤url,并按需修改返回数据 */

            // proxyXHR.getAllResponseHeaders();  /* 响应头信息 */
            // proxyXHR.requestHeader;  /* 请求头信息 */
            // proxyXHR.responseURL;  /* 请求的地址 */
            // proxyXHR.responseText;  /* 响应内容 */
            // proxyXHR.originUrl;  /* 请求的原始参数地址 */
            // proxyXHR.body;  /* POST 参数,GET参数在 url 上面 */
        }
    });
})();

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值