jquery ajax 全局 去重 拦截

// 1: 放弃后触发的提交
// 2: 放弃先触发的提交
    var Ajax_Unique_Status_Arr = [1, 2];

    var pendingRequests = {};
        $.ajaxPrefilter(function( options, originalOptions, jqXHR ) {
            var Ajax_Unique_Status = options.unique;
                //这里的Ajax_Url可以针对post请求, 提取{url, data} 的object指纹;
            var Ajax_Url = options.url;
            
            console.log(options, originalOptions, jqXHR);

            // 若无需,直接return;
            if (Ajax_Unique_Status_Arr.indexOf(Ajax_Unique_Status) === -1) {
                return;
            }

            // 去重处理
            if (!pendingRequests[Ajax_Url]) {
                pendingRequests[Ajax_Url] = jqXHR;
            }else{
                if (Ajax_Unique_Status === Ajax_Unique_Status_Arr[0]) {
                    jqXHR.abort(); 
                    console.log('abort current request , url is : ', Ajax_Url);
                } else if (Ajax_Unique_Status === Ajax_Unique_Status_Arr[1]) {
                    pendingRequests[Ajax_Url].abort();
                    console.warn('abort last request , url is : ', Ajax_Url);
                }
            }

            // 后期处理
            var complete = options.complete;
            options.complete = function(jqXHR, textStatus) {
                pendingRequests[Ajax_Url] = null;
                if ($.isFunction(complete)) {
                    complete.apply(this, arguments);
                }
            };
        });


        var url = 'http://www.grycheng.com/2016/01/07/%E7%AE%80%E8%BF%B0jquery-ajax%E7%9A%84%E6%89%A7%E8%A1%8C%E9%A1%BA%E5%BA%8F/';

        $.ajax({
            url,
            type: 'GET',
            // unique: 1,
            complete : ()=>{
                console.log('complete 1')
            }
        }).then((res)=>{
            console.log('success 1')
        }, (err)=>{
            console.log('error 1')
        })


        $.ajax({
            url,
            type: 'POST',
            // unique: 1,
        }).complete((res)=>{
            console.log('complete 22222', res)
        })

你可能感兴趣的:(jquery ajax 全局 去重 拦截)