2013-07-15 15 views
0

不同的功能根据官方的jQuery的文档:如何指定在JQuery中。总是()每个语句功能

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

另一种结构来完整的回调选项, 。总是()方法替换不推荐的.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()函数获得以下参数(data,textStatus,jqXHR),但是如果延迟被拒绝,它会通过(jqXHR,textStatus,errorThrown)。

感谢

+0

当然这就是'.done()'和'.fail()'的意思,你可以有多个这样的回调函数。 – Orbling

+0

@Orling,感谢您的回放,我知道每个.done()和.fail()都会执行我正在查找的部分内容,但正如您可能知道的那样.fail()仅在执行时其他方式都没有成功,换句话说,它们并不是每次都一起执行,然而,.always()总是被调用,这就是为什么它很重要,但是我说的问题是将代码的单独部分按不同状态执行。 – ghaliloo

+0

难道你不只是检查第一个参数,看看它是否是'jqXHR'呢? – Orbling

回答

3

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

除此之外,你检查arguments.length为参数的个数,然后通过arguments[0]等访问论点,但依靠参数计数是一个糟糕的主意,因为它可能不是面向未来。

+0

@TheifMaster,感谢您的回放,但是如果我可以重新启用一个按钮,隐藏在.done()中的一个按钮,并使用以下条件测试: If(jqXHR.status === 200) { //重新启用按钮,隐藏跳动等。 } 例如 有什么必要具有.always()函数? 如果是这样,我认为.always()是没有必要的,应该从JQuery中删除。 – ghaliloo

+0

@ghaliloo因为'always()'* always *运行,而'done()'只在延迟对象被解析时运行(即ajax查询成功) – Populus

+0

@ghaliloo不,只会重新启用按钮if请求*成功*。ThiefMaster希望在请求后重新启用按钮*,无论它是否成功*,这就是'.always()'的用例。 –