Edit in JSFiddle

// ajax使用promise后的写法
$.ajax("https://api.github.com/users/webhj")
    .done(function(data) {
        alert(data.name)
    })
    .fail(function(fail) {
        console.log(JSON.parse(fail.responseText).message)
    })



/*  var a1=$.Deferred();
 var a2=$.Deferred();
 $.when(a1,a2).done(function (a1,a2) {
 console.log(a1);
 console.log(a2);
 })
 a1.resolve(8);
 a2.resolve(9);*/


function success(data) {
    console.log("success data = " + data);
}

function fail(data) {
    console.log("fail data = " + data);
}

function progress(data) {
    console.log("progress data = " + data);
}

function always(data) {
    console.log("always data = " + data);
}

var deferred = $.Deferred();

// 一起注册回调
//deferred.then(success, fail, progress);

// 分别注册回调
deferred.done(success);
deferred.fail(fail);
deferred.progress(progress);
//always都会被调用
deferred.always(always);

deferred.notify("10%");
deferred.resolve("ok");
deferred.reject("fail");


/*    var df1 = $.Deferred();
 console.log(df1.state());//pending

 var df2 = $.Deferred();
 df2.resolve();           //resolved
 console.log(df2.state());

 var df3 = $.Deferred();
 df3.reject();
 console.log(df3.state());//rejected*/
/*

 var df = $.Deferred();
 df.done(function(){alert("first");})
 .fail(function(){alert("fail");});

 df.done(function(){alert("second");});
 df.done(function(){alert("third");});
 //df.reject();
 df.resolve();
 */



//依次调用
var url1 = 'https://api.github.com/users/hgzr';
var url2 = 'https://api.github.com/users/430527';
var url3 = 'https://api.github.com/users/webhj';
var promise1 = $.ajax(url1);
var promise2 = promise1.then(function(data) {
    return $.ajax(url2, {
        "data": data
    });
});
var promise3 = promise2.then(function(data) {
    return $.ajax(url3, {
        "data": data
    });
});
promise3.done(function(data) {
    var datas = data;
    $('h2').html(datas.name)
    $('address').html(datas.blog)
});


//共同调用,当ajax1和ajax2操作都成功的时候,会调用onDone回调函数。
var promise1s = $.ajax(url1),
    promise2s = $.ajax(url2),
    promiseCombined = $.when(promise1s, promise2s);
promiseCombined.done(onDone);

function onDone(a, b) {
    console.log(a, b, 1)
}
<h2></h2>
<address></address>

              

External resources loaded into this fiddle: