为什么这么做
前提
加入基于这样的一个现实,我们后台返回给我们的数据中都有一个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);