2011-11-22 4 views
1

PM 시스템을 만들고 있는데, 현재 시스템에 별표 메시지를 추가하고 있습니다 (사용자가 메시지에 별표를 표시 할 수 있도록).1 분 내에 요소가 클릭되는 횟수를 제한하려면 어떻게해야합니까?

사용자가 주연을 남기고 메시지의 별표를 제거하는 것이 계속 반복되면 서버를 망칠 것입니다 (호스트는 프로세스가 멈출 때까지 503 오류를 둡니다). 메시지에 별표를 표시하려면 별표를 클릭하여 별표를 표시하거나 다시 클릭하여 별표를 제거하는 것처럼 간단합니다.

이 분 내 시간의 X 번호를 클릭 한 후 오류가 팝업 만들기보다는 많이 클릭되는 것을 방지하거나하는 방법이 있나요? 스타를 클릭하면 AJAX 요청을 전송하고 데이터베이스를 업데이트하므로 서버 오버로드를 방지 할 수 있습니다. 당신이 그것을 성급하게 할 때, 그것은 똑같은 일을합니다.

1 분 내에 별표를 클릭하면 오류가 표시되는 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- sharps-function-throttler – SuitedSloth

+0

@juand : 감사합니다. – Nathan

답변

1

/O를 당신의 addStar 기능에 대한 샘플 솔루션 w는 무엇을 "메시지가 주연하는"의미 알고 생각합니다. 이렇게하면 사용자가 마지막으로 클릭 한 후 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는 오류 메시지를 표시하지 않는 것이 좋습니다.

별을 클릭 할 때마다 카운트 다운 타이머를 시작/재설정하는 것이 좋습니다. 카운트 다운이 끝나면 별의 현재 상태를 보냅니다. 사용자 피드백은 보존되고 속도 제한은 존중됩니다.

그들은 속도 제한이 있는지, 매번 요청을 보내지 않을 필요는 없습니다.

(즉 간단한 문제를 설명하는 단어를 많이, 그리고 나는 우리가 사진 : 여기

+0

이것은 아주 좋은 생각입니다. 감사. 그리고 예, 그것은 많은 말이었고, 그림은 불필요했습니다. 그래서 제가 그것을 제거했습니다 : – Nathan