2011-11-22 54 views
1

我正在製作一個PM系統,而我目前正在添加系統消息(因此用戶可以爲其發送消息)。如何限制元素在一分鐘內被點擊的次數?

問題是,如果用戶一直保持主播和取消標記郵件非常快(一遍又一遍地單擊它),它會弄亂服務器(主機將放置一個503錯誤,直到進程停止)。要爲信息加星標很簡單,就像點擊星星來點擊它/再次點擊它以取消它。

有沒有一種方法,以防止它被點擊了很多,或者說做了錯誤彈出被點擊一分鐘內X次數後?這將防止它重載服務器,因爲當你點擊明星時,它會發送一個AJAX請求並更新數據庫;當你明星時,它會做同樣的事情。

如果明星在一分鐘左右被點擊,是否存在顯示錯誤的jQuery方式?

這些都是我的功能主演:

function addStar(id) { 
    $('#starimg_' + id).removeClass("not_starred").addClass("starred"); 
    $('#star_' + id).attr({ 
     'title': 'Starred', 
     'onclick': 'removeStar(' + id + ')' 
    }); 
    $.get('tools.php?type=addstar', {id: id}, function(data) { 
    if(data=='true') { // tools.php will echo 'true' if it is successful 
    alertBox('The message has been starred successfully', 2500); 
    } 
    else { alertBox('An error has occurred. Please try again later.'); } 
}); 
} 

function removeStar(id) { 
    $('#starimg_' + id).removeClass("starred").addClass("not_starred"); 
    $('#star_' + id).attr({ 
     'title': 'Not starred', 
     'onclick': 'addStar(' + id + ')' 
    }); 
    $.get('tools.php?type=removestar', {id: id}, function(data) { 
    if(data=='true') { // tools.php will echo 'true' if it is successful 
    alertBox('The message has been unstarred successfully', 2500); 
    } 
    else { alertBox('An error has occurred. Please try again later.'); } 
}); 
} 

提前感謝!

+2

http://stackoverflow.com/questions/5031501/how-to-rate-limit-ajax-requests – SuitedSloth

+0

你也可以使用這樣的:http://stackoverflow.com/questions/7804312/remy-銳器功能調節器 – SuitedSloth

+0

@juand:謝謝。 – Nathan

回答

1

這裏是你的addStar功能的樣品溶液。這將在用戶最後一次點擊後2秒發送請求,所以如果用戶點擊快樂,那麼這些中間點擊將不會發送請求,因爲定時器將被重置。

function addStar(id, delayRequests) 
{ 
    ... 
    if(delayRequests == true){ 
     clearTimeout(timer); 
     timer= setTimeout(function() { sendRequestToAddStar(id); },2000); 
    } 
    else{ 
     sendRequestToAddStar(id); 
    } 
} 

function sendRequestToAddStar(id) 
{ 
    $.get('tools.php?type=removestar', {id: id}, function(data) {... 
} 
+0

哇,謝謝。 :)所以我也會爲'removeStar()'函數做同樣的事情,或者我只需要它用於'addStar()'函數? – Nathan

+0

確定你可以..或者你也可以有一個sendRequest和傳遞參數來決定添加或刪除星星,這取決於你。 – zero7

+0

好,太好了。我現在就試試這個。這是完美的。而且我剛剛注意到說「該郵件已經加了星號」是愚蠢的,因爲當你點擊這個星號時就會顯示你已經加了它。 – Nathan

1

在任何情況下,IMO最好不要顯示錯誤消息。

考慮每次單擊星標時啓動/重置倒數計時器。一旦倒數,發送當前狀態的明星。用戶反饋被保留下來並且限速受到尊重。

他們不需要知道有速率限制,或者它不是每次都發送請求。

(這是一個很大的詞來形容一個簡單的問題,我認爲我們知道什麼是「主演的消息」是指W/O圖片:)

+0

這是一個非常好的主意。謝謝。是的,這是很多的話,圖片是不必要的,這就是爲什麼我刪除它:) – Nathan

相關問題