返回值:Deferreddeferred.done(doneCallbacks, [doneCallbacks])

添加延迟对象被受理(done)时执行的处理程序。

deferred.done() 方法可以接受一个或多个参数,每个参数既可以是单个函数,也可以是一个函数数组。当延迟对象被受理(done)时,doneCallbacks 就会被调用。回调函数的执行顺序和它们被添加的顺序是一样的。由于 deferred.done() 返回的是延迟对象,所以可以链接其它的延迟对象,包括额外的 .done() 方法。当延迟对象被受理(done)时,doneCallbacks 就会被调用,并且可以使用传递给 resolve resolveWith 方法的参数,按照它们被添加的顺序。了解更多内容,请参见如下文档 延迟对象

示例:

由于 jQuery.get 方法返回 jqXHR 对象,该对象继承自延迟对象,所以我们可以使用 .done() 方法,添加一个成功时调用的回调函数。

jQuery 代码:

$.get("test.php").done(function() { 
  alert("$.get succeeded"); 
});

示例:

当用户点击按钮时,受理延迟对象,触发一系列回调函数:

<!DOCTYPE html>
<html>
<head>
<script src="jquery.min.js"></script>
</head>
<body>


 <button>Go</button>
 <p>Ready...</p>


<script>


// 3 functions to call when the Deferred object is resolved
function fn1() {
  $("p").append(" 1 ");
}
function fn2() {
  $("p").append(" 2 ");
}
function fn3(n) {
  $("p").append(n + " 3 " + n);
}

// create a deferred object
var dfd = $.Deferred();

// add handlers to be called when dfd is resolved
dfd
// .done() can take any number of functions or arrays of functions
.done( [fn1, fn2], fn3, [fn2, fn1] )
// we can chain done methods, too
.done(function(n) {
  $("p").append(n + " we're done.");
});

// resolve the Deferred object when the button is clicked
$("button").bind("click", function() {
  dfd.resolve("and");
});


</script>
</body>
</html>

演示: