Phi*_*enn 17 jquery jquery-deferred
我用:
var jqXHR = $.ajax(settings);
jqXHR.success(function(result){});
jqXHR.error(function(result){});
jqXHR.complete(function(result){});
Run Code Online (Sandbox Code Playgroud)
但是版本1.5添加了延迟对象.
问:一般来说,你什么时候使用成功,错误和完整的方法与新的延迟,完成和失败的热度?
Aln*_*tak 17
因为$.ajax()和家庭.success只是Deferred的同义词.done,同样也是.error它的同义词.fail.
实际上,您显示的示例已经是延迟方法,但名称不同.
.complete是大多为新的jQuery 1.6的代名词.always,你可以得到使用同样的效果$.then(cb, cb),这将导致cb要调用的AJAX调用成功与否.我相信有,它们的参数传递到之间的"失败"回调的细微差别.complete,.always和$.then变种.
我个人更喜欢使用那些命名函数的延迟版本,因为那样你就不必担心你的延迟对象是否是jqXHRs.只有jqXHRs有.success,.error和.complete,但每次延期(包括jqXHRs)有.done,.fail和.always.
编辑似乎jQuery的开发者同意我的看法-他们已经宣布的是.success,.error和.complete将在jQuery的1.8被弃用
延迟意味着取代jqXHR并将成功和错误的概念抽象为ajax.
快速浏览一下源代码:jQuery 1.6.1
// completeDeferred is resolved in only one place.
completeDeferred.resolveWith( callbackContext, [ jqXHR, statusText ] );
deferred.promise( jqXHR ); // this attaches the promise methods to jqXHR
jqXHR.success = jqXHR.done;
jqXHR.error = jqXHR.fail;
jqXHR.complete = completeDeferred.done;
Run Code Online (Sandbox Code Playgroud)
我制作了一个奶酪幻灯片放映,以了解延迟是如何有用的.