ajax请求then和done的区别,jQuery.ajax处理继续响应:“成功:”还是“ .done”?

小编典典

success一直是jQuery中成功回调的传统名称,定义为ajax调用中的一个选项。但是,由于实现了$.Deferreds更复杂的回调,因此done是实现成功回调的首选方法,因为可以在any上调用它deferred。

例如,成功:

$.ajax({

url: '/',

success: function(data) {}

});

例如,完成:

$.ajax({url: '/'}).done(function(data) {});

令人高兴的done是,$.ajax现在的返回值是一个可以绑定到应用程序其他任何地方的递延承诺。假设您要在几个不同的地方进行此ajax调用。而不是你的成功传递函数作为一个选项,以使这个Ajax调用的功能,你可以有函数返回$.ajax本身并绑定你的回调done,fail,then,或什么的。请注意,always无论请求成功还是失败,该回调都会运行。done仅在成功时触发。

例如:

function xhr_get(url) {

return $.ajax({

url: url,

type: 'get',

dataType: 'json',

beforeSend: showLoadingImgFn

})

.always(function() {

// remove loading image maybe

})

.fail(function() {

// handle request failures

});

}

xhr_get('/index').done(function(data) {

// do stuff with index data

});

xhr_get('/id').done(function(data) {

// do stuff with id data

});

就可维护性而言,这样做的一个重要好处是,您已经将ajax机制包装在了特定于应用程序的功能中。如果您决定$.ajax将来需要以不同的方式进行操作,或者使用其他的ajax方法,或者退出jQuery,则只需更改xhr_get定义(确保返回一个promise或至少一个done方法),以上述示例为例)。整个应用程序中的所有其他参考都可以保持不变。

您可以执行更多(更酷)的操作$.Deferred,其中之一是pipe即使$.ajax请求本身成功,也可以触发服务器报告的错误失败。例如:

function xhr_get(url) {

return $.ajax({

url: url,

type: 'get',

dataType: 'json'

})

.pipe(function(data) {

return data.responseCode != 200 ?

$.Deferred().reject( data ) :

data;

})

.fail(function(data) {

if ( data.responseCode )

console.log( data.responseCode );

});

}

xhr_get('/index').done(function(data) {

// will not run if json returned from ajax has responseCode other than 200

});

$.Deferred在此处了解更多信息:http

//api.jquery.com/category/deferred-

object/

注意 :从jQuery 1.8开始,pipe不赞成使用then以完全相同的方式使用。

2020-07-26

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值