一直用jquery,ajax一直是这么写:
1 $.ajax({ 2 url: 'abc.com/index', 3 type: 'post', 4 data: { abc:1 }, 5 success: function (data) { 6 if (!data.success) { 7 alert(data.message); 8 } else { 9 10 } 11 } 12 });
前一段时间 看见别人这么写觉得很不错:
1 $.ajax({ 2 url: 'abc.com/index', 3 type: 'post', 4 data: { abc:1 }, 5 }).done(function(data) { 6 if (!data.success) { 7 alert(data.message); 8 } else { 9 } 10 }).fail(function() { 11 alert('请稍后重试'); 12 });
突然感觉 done fail 这种写法不错....今天在写js的时候想 自定义的方法怎么实现 这种 ?
然后搜索下发现jquery封装了promise对象 只需要这么用:
1 function test(txt) { 2 var dtd = $.Deferred(); 3 if (!txt.trim()) { 4 dtd.reject({ msg: '不能为空' }); 5 } else if (!reg.test(txt)) { 6 dtd.reject({ msg: '含有非法字符' }); 7 } else if (this.tags.indexOf(txt)>=0) { 8 dtd.reject({ msg: '已重复' }); 9 }
dtd.resolve(); 10 return dtd.promise(); 11 } 12 13 调用: 14 test('xxx') 15 .done(function(data){ 16 //xxxxxx 17 }) 18 .fail(function(data){ 19 //xxxx 20 })
说明 test 方法返回 的是一个promise对象
dtd.reject 会回调所有的 fail 方法
dtd.resolve 会回调 所有的 done方法