jquery defered 对象学习
文章参考 http://www.ruanyifeng.com/blog/2011/08/a_detailed_explanation_of_jquery_deferred_object.html
简单说,deferred对象就是jQuery的回调函数解决方案。在英语中,defer的意思是"延迟",所以deferred对象的含义就是"延迟"到未来某个点再执行。
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title>jquery deffered 学习</title> </head> <body> </body> <script src="jquery-3.1.1.min.js"></script> <script> $(function(){ /* $.ajax("hb.php") .done(function(){ alert("哈哈,成功了!"); }) .fail(function(){ alert("出错啦!"); }) .done(function(){ alert("第二个回调函数!"); }); */ var httpService = function(userSetting){ //在函数内部,新建一个Deferred对象 var dtd = $.Deferred(); // ajax 默认的配置信息 var defaultSetting = { type: "GET", url: "", data: "", success: function(msg){ console.log("ajax success in"); } }; // 检查用户输入的参数 userSetting = userSetting || {}; // 合并配置信息 var setting = $.extend(defaultSetting,userSetting); $.ajax({ type: setting.type, url: setting.url, data: setting.data, // beforeSend 在发送请求之前调用,并且传入一个XMLHttpRequest作为参数 beforeSend: function (XMLHttpRequestObject) { console.log("beforeSend"); console.dir(XMLHttpRequestObject); }, success: function (msg) { console.log("success"); if(setting.success != null && setting.success != undefined){ setting.success(msg); } // 改变Deferred对象的执行状态 dtd.resolve(msg); }, //有以下三个参数:XMLHttpRequest 对象、错误信息、(可选)捕获的异常对象。 error:function(XMLHttpRequestObject,msg,errorObj){ console.log("error"); if(setting.error != null && setting.error != undefined){ setting.error(msg); } // 改变Deferred对象的执行状态 dtd.reject(XMLHttpRequestObject); }, // dataFilter 在请求成功之后调用。传入返回的数据以及"dataType"参数的值。 // 并且必须返回新的数据(可能是处理过的)传递给success回调函数。 dataFilter: function (response,dataType) { console.log("dataFilter"); // console.dir(arguments); return response; }, // complete 当请求完成之后调用这个函数,无论成功或失败。 // 传入XMLHttpRequest对象,以及一个包含成功或错误代码的字符串 complete: function (XMLHttpRequestObject) { console.log("complete"); //console.dir(arguments); } }); // 返回promise对象 return dtd.promise(); }; var mySetting = { type: "POST", url: "hb.php", data: "name=liumei", // 传统方式执行的成功回到 success: function(msg){ console.log("黄彪测试成功回调函数!" + msg); }, // 传统方式执行的失败回到 error : function(msg){ console.log("黄彪测试失败回调函数!" + msg); } }; httpService(mySetting) // deffered 成功执行的回调函数 .done(function(msg){ console.log("ajax success out callback"); alert(1 + " msg : " + msg); }) // deffered 失败执行的回调函数 .fail(function(XMLHttpRequestObject){ console.log("ajax error out callback"); alert(1 + " msg : " + XMLHttpRequestObject); }); }); </script> </html>
相关推荐
EdwardSiCong 2020-11-23
85477104 2020-11-17
hhanbj 2020-11-17
81427005 2020-11-11
seoppt 2020-09-13
honeyth 2020-09-13
WRITEFORSHARE 2020-09-13
84483065 2020-09-11
momode 2020-09-11
85477104 2020-08-15
83510998 2020-08-08
82550495 2020-08-03
tthappyer 2020-08-03
84901334 2020-07-28
tthappyer 2020-07-25
TONIYH 2020-07-22
tztzyzyz 2020-07-20
83510998 2020-07-18
81463166 2020-07-17