美文网首页
jquery ajax 全局 去重 拦截

jquery ajax 全局 去重 拦截

作者: 紫夜蓝竹 | 来源:发表于2017-09-21 16:42 被阅读0次
    // 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 全局 去重 拦截

          本文链接:https://www.haomeiwen.com/subject/yvctextx.html