我用:
var jqXHR = $.ajax(settings); jqXHR.success(function(result){}); jqXHR.error(function(result){}); jqXHR.complete(function(result){});
但1.5版本添加了延迟对象。
解决方法
对于$ .ajax()和family .success只是Deferred的.done的同义词,同样.error是.fail的同义词。
所以实际上你显示的例子已经是延迟的方法,但是使用不同的名字。
.complete主要是新的jQuery 1.6 .always的同义词,您可以使用$ .then(cb,cb)获得相同的效果,这将导致cb被调用,无论AJAX调用是否成功。我认为参数传递给.complete,.always和$ .then变体之间的“失败”回调有很小的区别。
我个人更喜欢使用这些命名函数的Deferred版本,因为那样你不需要担心你的延迟对象是否是jqXHR。只有jqXHRs具有.success,.error和.complete,但每个Deferred(包括jqXHR)都有.done,.fail和.always。
编辑似乎jQuery开发人员同意我 – 他们有announced.Success,.error和.complete将被弃用在jQuery 1.8