2013-12-17 18 views
0

在單一頁面瀏覽器應用程序中與javascript中的服務器通信時,我想提供一個回調函數,該函數在服務器回覆後始終調用,而不管結果是成功或某種錯誤。在javascript中調用某個特定調用的所有ajax回調的一個入口點

兩種情況下,我需要這樣的:

1)我想禁用「保存」按鈕,在等待服務器的響應,並在服務器後錯誤或成功響應再次啓用它。

2)我有一個輪詢機制,當服務器出於某種原因響應緩慢時,我想防止堆棧調用 - 我希望等待一個輪詢呼叫完成後再進行下一個呼叫。

一個解決方案,我現在所擁有的涉及確保兩個功能(成功和錯誤)相處在一個長方法鏈,這感覺就像一個脆弱的,麻煩的解決方案(僞上下的代碼)選項中傳遞:

function doCall() { 
    framework1.callit({success : myCallback, error : myCallback}) 
    }; 

    framework123.callit = function(options) { 
    options = options || {}; 
    if (options.error) { 
     var oldError = options.error; 
     options.error = function(errorStuff) { 
     // callit error stuff 
     oldError(errorStuff); 
     } else { 
     // callit error stuff 
     } 
    generalCallFunction(options); 
    } 

    function generalCallFunction(options) { 
    options = // ... checking success and error once again to get general success and error stuff in there, plus adding more options 
    ajax(blah, blah, options); 
    } 

我也有一個骨幹解決方案,在這裏我以類似的方式聽同步事件和錯誤回調。

我總是害怕錯誤或成功功能在途中迷路,整個事情很難遵循。

任何使這個東西儘可能容易的框架或模式?無論結果是錯誤還是成功,總有一些事情總會發生,這是否是一件奇怪的事情?

+0

在任何人的答案用'jQuery' .. jQuery有很多的質量要求內建的。與全局錯誤處理一樣,並在請求完成/失敗後始終執行一個函數。 – A1rPun

+0

我不完全確定你想要做什麼,但會''.a​​jaxSetup({success:function(){}});''做你想做的事情? – Kippie

回答

2

您可以使用jQuery.ajax({ details here...).always(callback);

或者,在骨幹

// logic to create model here 
model.fetch().always(callback); 
+0

不錯 - 這至少會擺脫成功/錯誤的冗餘。我需要破解骨幹,在那裏得到總是(),但在另一種情況下,它應該可以正常工作。 –

+0

沒有等待,骨幹的fetch調用返回它看起來的xhr對象!嗯,這可能會正常工作... –

+0

基於此做出了一個解決方案,它似乎工作得很好。謝謝! –

相關問題