2014-07-06 73 views
0

所以我有一個列表頁面是這樣的:禁用所有點擊事件,直到AJAX請求完成

//start loop 
<div id ='row-prd-<number>'> 
    <strong>product Name</strong> 
    <a href='#' id='edit-prd-<number>'>Edit</a> 
    <a href='#' id='delete-prd-<number>'>Delete</a> 
</div> 
//end loop 

在我的JavaScript,我做這樣的事情:

$('#delete-prd-<number>').click() 
{ 
    //change style of the row to show its being deleted.. 
    $('row-prd-<number>').addClass('deleting'); 

    //make ajax call to delete 
    ajaxDeleteRecord(prd-<number>); 
} 

現在,這個工作正常。我擔心的是,在較低的連接速度情況下,刪除ajax呼叫需要幾秒鐘才能完成。我擔心如果用戶點擊另一條記錄的編輯或刪除按鈕會發生什麼情況。所以我有三個問題:

1.我應該禁用頁面上的所有點擊事件,直到ajax調用返回? 對我來說,這似乎不是一個好的選擇 - 假設ajax調用出錯......在這種情況下,用戶現在處於他/她無法再點擊頁面中任何內容的狀態!

2.我該如何處理? ...我有點不知道該怎麼做。我想這是我有三個問題中最重要的。

1.如果我必須禁用並重新啓用頁面上元素的點擊(編輯/刪除/新建),有沒有簡單的方法來做到這一點? ...只是好奇...

+0

怎麼樣讓你的AJAX調用同步?在AJAX調用返回之前,它會阻止其他所有內容。 – mguijarr

+0

嗯...這是一個非常好的建議。我想我將不得不處理在任何情況下破壞的ajax響應...... –

+0

考慮處理錯誤情況,而不是通過使請求同步來使瀏覽器無響應。查找'$ .ajax()'中的'error'回調選項' – techfoobar

回答

-1

你的方案1將做的伎倆,以便禁用所有其他事件。它也會很整潔。

您可以通過在呼叫設置

async:false 

有另一件事有Ajax調用是同步的,而不是異步的。

的語法將是這個樣子:

$.ajax({ 
     url: 'your url', 
     global: false, 
     type: 'POST', 
     data: {}, 
     async: false, 
     success: function() {}, 
     error: function() {} 
    }); 
+0

謝謝!你將如何處理ajax響應不會回來的情況?我不希望用戶被卡住而不能做任何事情...... –

+0

這可以在相同的ajax請求的錯誤塊中處理。 ajax請求必須作爲錯誤或成功返回。 – V31

+0

如果必須使它同步,ajax有什麼好處? – Anant