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)但是如果 deferred 被拒绝它通过了(jqXHR、textStatus、errorThrown)。

谢谢

4

1 回答 1

3

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

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

于 2013-07-15T13:44:00.010 回答