// $.ajax
// 参数 obj
// 属性 url: 请求地址 https://easy-mock.com/mock/5c0b4a876162b83fe0a50cb9/person
// type: 请求方式
// data: {} 参数,信息
// success: 请求成功后的处理函数
// error: 请求失败后的处理函数
// complete: 请求完成后的处理函数
// context:改变函数上下文
// timeout:
// async: true false 是否异步
// dataType: 'jsonp'
// $.ajax({
// url: 'https://sp0.baidu.com/5a1Fazu8AA54nxGko9WTAnF6hhy/su',
// type: 'GET',
// data: {
// wd: 'nba',
// cb: 'deal'
// },
// dataType: 'jsonp'
// // success: function(res){
// // console.log(res.data)
// // console.log(this)
// // },
// // error: function(e){
// // console.log(e.status, e.statusText)
// // },
// // context: $('#demo')
// })
// function deal(res){
// console.log(res)
// }
// $.Callbacks
// 'once' 'memory' 'unique' 'stopOnFalse'
// var cb = $.Callbacks()
// cb.add(a, b);
// function a(){
// console.log('a');
// }
// function b(x){
// console.log('b',x);
// }
// cb.fire(10);
// $.Deferred
// var df = $.Deferred();
// done 成功 fail 失败 progress 正在进行
// resolve reject notify
// function cresateScore(){
// var df = $.Deferred();
// setInterval(function(){
// var score = Math.random() * 100;
// if(score > 60){
// df.resolve();
// }else if(score < 50){
// df.reject();
// }else{
// df.progress()
// }
// }, 1500)
// return df.promise();
// }
// var df = cresateScore();
// // 注册成功的回调函数
// df.done(function(){
// console.log('oh yeah I do it');
// })
// // 注册失败的回调函数
// df.fail(function(){
// console.log('sorry I am loser');
// })
// // 注册进行时的函数
// df.progress(function(){
// console.log('waiting...')
// })
// 简化注册的写法
// df.then(function(){
// console.log('done')
// return 'ok';
// }, function(){
// console.log('fail')
// }, function(){
// console.log('progress')
// }).then(function(params){
// console.log(params)
// })
// $.when(df1, df2).then()