在5个新的JQUERY.AJAX()示例JQUERY 1.9+之后 ,我想记录一下对jQuery .Ajax()1.9+使用promise接口的更改(有些可以归类为优点)。
- 命名 –显然,名称已从成功->完成,错误->失败,完成->始终更改。
- 延期 –延期承诺可以绑定到应用程序中的任何位置,从而具有灵活性和可重用性。
- 回调顺序 –按此顺序调用:1个失败,2个完成,3个始终。 标准。
- Mutiples –您可以指定任意数量的相同类型的回调。 即.always()、. always()、. always()一旦ajax请求返回完成,它们都将被触发。
- 争论
- 链接 –从jQuery 1.8开始,您可以使用.then()函数链接ajax调用。 参见以下示例。
- 合并 –您可以将.done()和.error()合并为.then()。 参见以下示例。
//old complete function
complete Function( jqXHR jqXHR, String textStatus )
//new done function
jqXHR.done(function(data, textStatus, jqXHR) {});
资料来源: jQuery.Ajax API
如果您发现我想念的更多内容,请随时发表评论。
将.done()和.fail()合并为.then()
您可以将done()和fail()函数合并为一个then()函数。 上面的代码可以重写为:
var promise = $.ajax({
url: "/myServerScript"});
promise.then(mySuccessFunction, myErrorFunction);
资料来源: jQuery中的Deferred和Promise
链接Ajax请求
从jQuery 1.8开始,您可以顺序地链接then()函数。 在下面的代码中,首先运行promise1,成功解决后,运行getStuff,返回一个promise,当成功解决后,将执行匿名函数。
var promise1 = $.ajax("/myServerScript1");
function getStuff() {
return $.ajax("/myServerScript2");}
promise1.then(getStuff).then(function(myServerScript2Data){
// Both promises are resolved});
Every callback function receives the result of the previous asynchronous function, in the case of Ajax, that would be the returned data.
使用.when()作为Promise
您可以使用.when()分配承诺回调函数,即.done()。
var container = $("#mycontainer");
$.when(
function () {
return $.Deferred(function (dfd) {
container.fadeOut('slow', dfd.resolve);
}).promise();
}(),
$.ajax({
url: 'Path/To/My/Url/1',
type: 'POST',
dataType: 'json'
}),
$.ajax({
url: 'Path/To/My/Url/2',
type: 'POST',
dataType: 'json'
})
).done(function (x, data) {
container.html('Your request has been processed!');
container.fadeIn('slow');
});
如您所见,我们将$ .when传递给三个承诺,一个用于淡出动画,另一个用于ajax操作。
*第一个参数是一个自执行的匿名函数,该函数创建延迟的处理程序并返回Promise。 在$ .Deferred的回调中,将dfd.resolve函数传递到fadeOut()的回调参数中,这意味着一旦动画完成,将解决延迟问题。
*关于其他两个参数,我们将传递给$ .when,因为$ .ajax的结果是一个实现Promise的jqXHR对象,我们只传递按原样返回的值。
资料来源: 永远遵守您的(jQuery)承诺
From: https://www.sitepoint.com/jquery-1-9-ajax-promise-interface-advantages/