jquery扩展原生ajax,减少逻辑,jquery插件

为什么这么做

前提

加入基于这样的一个现实,我们后台返回给我们的数据中都有一个json数据,数据中包含data,success,message等字段,success表示是否后台有操作的异常。

通用处理,减少处理的逻辑

基于这个样子,如果我们处理的时候,能够把error,或者返回数据后,后台异常等自动的进行处理,不需要在每一个ajax请求的时候都需要重新的书写这样的逻辑,减少了很多的代码量,节约时间,代码看起来也是比较的干净。

$.extend去扩展原生的jquery.ajax

怎么样是不是值得去学习一下啊,很多东西需要不断的去学习的,才能慢慢的进步,哈哈,小生有礼了。这个扩展怎么样狠具有实际的使用效果啊,感觉萌萌哒啊,萌萌哒啊!

//立即执行函数
(function ($) {
    //得到原始的 $.ajax的对象
    var _ajax = $.ajax;
    $.ajax = function (options) {
        //每次调用发送ajax请求的时候定义默认的error处理方法
        var fn = {
            error: function (XMLHttpRequest, textStatus, errorThrown) {
                alert.('错误消息'+XMLHttpRequest.responseText), 

            },
            success: function (data, textStatus) {
               //处理逻辑,如果后台异常,终止处理
               if(data.success==false){
                 alert(data.message);
                 return false;
               }
               //这里再去调用传进来的success的方法
               options.success(data,textStatus);
            },
            beforeSend: function (XHR) { },
            complete: function (XHR, TS) { }
        }
        //如果在调用的时候写了error的处理方法,就不用默认的
        if (options.error) {
            fn.error = options.error;
        }
        //这里需要拦截掉原始的success处理,处理好了再去调用原始的方法
        /*if (options.success) {
            fn.success = options.success;
        }*/
        if (options.beforeSend) {
            fn.beforeSend = options.beforeSend;
        }
        if (options.complete) {
            fn.complete = options.complete;
        }
        //4.扩展原生的$.ajax方法,返回最新的参数
        var _options = $.extend(options, {
            error: function (XMLHttpRequest, textStatus, errorThrown) {
                fn.error(XMLHttpRequest, textStatus, errorThrown);
            },
            success: function (data, textStatus) {
                fn.success(data, textStatus);
            },
            beforeSend: function (XHR) {
                fn.beforeSend(XHR);
            },
            complete: function (XHR, TS) {
                fn.complete(XHR, TS);
            }
        });
        //5.将最新的参数传回ajax对象
        _ajax(_options);
    };
})(jQuery);

理解几个Jquery中的东西

1、
jQuery.fn = jQuery.prototype. 对prototype肯定不会陌生啦。虽然JavaScript没有明确的类的概念,但是用类来理解它,会更方便。jQuery便是一个封装得非常好的类,比如 我们用 语句 $(“#btn1”) 会生成一个 jQuery类的实例。可以通过这个类的实例调用公有的方法。

jQuery.fn.extend(object), 对jQuery.prototype进行扩展,就是为jQuery类添加“成员函数”

通过 $(“.className”).expandfunction();

//不要污染空间
;(function($){  
    $.fn.extend({  
        "expandfunction":function(params){  
            //这里写插件代码  
        }  
    });  
})(jQuery);  
//或者  
;(function($){  
    $.fn.expandfunction=function(params){  
        //这里写插件代码  
    }  
})(jQuery);  

2、
jQuery.extend(object); 为扩展jQuery类本身.为类添加新的方法,可以理解为添加静态方法。

.expandfunction使 .fn.functionmy.function1=?

//但是最好不要污染定义的空间最好自己定义一下子
;(function($){  
    $.extend({  
        "expandfunction":function(params){  
            //这里写插件代码  
        }  
    });  
})(jQuery);

//或者  
;(function($){  
    $.expandfunction=function(params){  
        //这里写插件代码  
    }  
})(jQuery);

你可能感兴趣的:(JS)