我有一個網頁,我需要用戶點擊保存按鈕,將表單的內容保存到網絡服務器。如何在同步代碼中獲得對異步響應的訪問?
保存的一部分是檢查可能需要提示給用戶的項目,以便他們確認,編輯和重新排列JavaScript彈出窗口中的項目。
如果需要提示,我需要能夠訪問用戶的響應,即點擊確認或取消按鈕,如果單擊取消按鈕,必須停止保存過程,如果確認被點擊按鈕保存過程必須繼續:
同步行爲的僞代碼:
function SaveData()
{
if (itemsRequireValidation)
{
if (RESPONSE_CANCEL == ConfirmationDialog.Show()) {
return;
}
}
ProcessConfirmData(ConfirmationDialog.OutputData);
//...Do the rest of the save process
}
鑑於:
的confir mation對話框是一個Javascript對象,它構建了一些HTML輸出,並且通過這樣的事實引入了異步行爲,即在用戶單擊對話框中包含的確認按鈕或取消按鈕之前,我們無法真正繼續該過程。
阻止代碼使Javascript等待,直到用戶單擊其中一個或另一個將會有消極行爲,可能會導致瀏覽器崩潰或阻止用戶單擊任一按鈕。
我怎麼能去重構這個要考慮到一個事實,即對話框本質上是異步的,但我需要處理用戶的交互就好像它是同步?
我覺得我只是需要從另一個角度來看待這個,現在我沒有看到。
我缺少的一點是,對話可能不需要叫重做...那麼什麼? – BenAlabaster 2010-06-21 15:40:31
噢,我想我剛剛接觸到了,我傳遞了RESPONSE_OK方法的「保存」函數,但是如果對話框沒有被調用,我就直接調用save函數。讓我變傻......必須是週一早上:P – BenAlabaster 2010-06-21 15:41:49
@BenAlabaster - 對不起,正在擴大我的答案,因爲你在評論 - 這看起來是正確的? – gnarf 2010-06-21 15:42:08