js监听xmlhttprequest事件

js监听xmlhttprequest事件

最近在项目中使用了tinymce组件进行富文本的实现,因为是后台工程,所以在全部接口进行了token校验,其中该组件的上传图片功能init时仅指定了上传的路径,并没有字段对request进行设置;翻了翻文档仅找到了重定义上传方法的解决方式;这里贴一个js直接监听xmlhttprequest事件的方法,即插即用;

(function() {
        if (typeof window.CustomEvent === 'function') return false;

        function CustomEvent(event, params) {
            params = params || { bubbles: false, cancelable: false, detail: undefined };
            // 创建自定义事件
            var evt = document.createEvent('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);

            return realXHR;
        }

        window.XMLHttpRequest = newXHR;
    })();

	// 调用
    window.addEventListener('ajaxReadyStateChange', function(e) {
        if (e.detail.readyState === 1) {
            e.detail.setRequestHeader('token', '1326');
        }
        e.detail.onload = function() {
            console.log('event====>', e.detail);
        };
    });
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值