2013-07-15 49 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()'的用例。 –