.ajax always怎么用,关于ajax:如何为JQuery .always()函数中的每个语句指定不同的函数...

根据官方JQuery文档:

jqXHR.always(function(data|jqXHR, textStatus, jqXHR|errorThrown) { });

An alternative construct to the complete callback option, the

.always() method replaces the deprecated .complete()method.

In response to a successful request, the function's arguments are the

same as those of .done(): data, textStatus, and the jqXHR object. For

failed requests the arguments are the same as those of .fail(): the

jqXHR object, textStatus, and errorThrown. Refer to deferred.always()

for implementation details.

让我们说我有以下ajax脚本:

$.ajax({

url: 'myPHPScript.php',

type: 'POST',

data: {

param_1: 'value_1',

param_n: 'value_n'…

},

username: 'myLogin',

password: 'myPassword',

beforeSend: function() {

alert('The object was created but not yet initilized');

}

}).done(function(data, textStatus, jqXHR) {

alert('All the request was sent and we received data');

}).fail(function(jqXHR, textStatus, errorThrown) {

alert('Error: the following error was occurred: ' + textStatus + ' Status : ' + jqXHR.Status);

}).always(function() {

// Here is my problem

});

在.always()函数中,如何为每个语句指定不同的函数,我的意思是当Deferred被解析时,always()函数会传递以下参数(data,textStatus,jqXHR)但是如果延迟被拒绝 它被传递(jqXHR,textStatus,errorThrown)。

谢谢

当然,这是.done()和.fail()的用途,你可以有多个这样的回调。

@Orbling,感谢你的重播,我知道.done()和.fail()中的每一个都会执行我正在寻找的部分内容,但正如你所知道的那样.fail()仅在另一个执行时执行 没有成功,在其他方面它们并不是每次都在一起执行,但是,.always()一直被调用,这就是为什么它很重要,但我所说的问题是将代码的一部分分开来 根据不同的状态执行。

你能不能只检查第一个参数,看它是否是jqXHR然后呢?

唯一的好解决方案是不使用always中的参数 - 如果需要特定于AJAX成功/失败的代码,请在done或fail回调中调用它们。 通常,always回调是您执行诸如重新启用按钮,隐藏悸动等事情的地方。所有这些都是您不关心请求结果的事情。

除此之外,您可以检查arguments.length的参数数量,然后通过arguments[0]等访问参数。但是依赖参数计数是一个坏主意,因为它可能不是未来的证据。

@TheifMaster,感谢你的重播,但是如果我可以重新启用一个按钮,在.done()中隐藏一个throbber等等条件测试,如:if(jqXHR.status === 200){// Re - 启用按钮,隐藏悸动等。}例如,有什么必须有.always()函数?如果是这样,我认为.always()不是必需的,应该从JQuery中删除。

@ghaliloo因为always()总是运行,而done()仅在解析延迟对象时运行(即ajax查询成功)

@ghaliloo不,如果请求成功,那只会重新启用该按钮。 ThiefMaster想要在请求之后重新启用按钮,无论它是否成功,这都是.always()的用例。

@ghaliloo不需要使用always函数。如果它不适合您的情况,请不要使用它。

@Mike,hhhhhhhhhhhhh,不,如果它不适合我的情况我就不会发表一篇关于它的新帖子,相反它对我来说非常有用,因为我想做一个任务,如果差异被解决了另一个如果它被拒绝,我必须在.always()中进行,因为它总是被调用,但是如果我输入.done()或.fail(),我将无法保证它将被执行。

@ghaliloo但我认为你错过了这一点。如果你使用done / fail / always,你将始终至少完成/ always或fail / always fire。因此,任何特定于成功或失败的逻辑都应该驻留在那些处理程序中。在这两种情况下都需要执行的任何逻辑(比如显示包含结果的div)都应该总是放在一起,这样你就不必在完成/不执行这些任务时都有公共代码。从本质上讲,它始终是一种重构工具。

默认情况下,只有2xx状态代码被视为成功。其他任何东西都会触发错误回调。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值