首页 文章

如何在JQuery .always()函数中为每个语句指定不同的函数

提问于
浏览
0

根据官方JQuery文档:

jqXHR.always(function(data | jqXHR,textStatus,jqXHR | errorThrown){});
完整回调选项的替代构造,.always()方法替换了不推荐使用的.complete()方法 . 响应成功的请求,函数的参数与.done():data,textStatus和jqXHR对象的参数相同 . 对于失败的请求,参数与.fail()的参数相同:jqXHR对象,textStatus和errorThrown . 有关实现细节,请参阅deferred.always() .

让我们说我有以下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 ) .

谢谢

1 回答

  • 3

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

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

相关问题