3

我有一个评论框,可以让用户通过按 Enter 发表评论。它使用AJAX(jQuery)请求来做到这一点。如果事件发生在上一条评论的 5 秒内并显示消息,有没有一种很好的方法来不让事件触发?还是应该在服务器端处理?

4

5 回答 5

5

根据您的用例,您可以使用throttleor debounce

http://benalman.com/code/projects/jquery-throttle-debounce/examples/debounce/

或者看看这个帖子:

https://stackoverflow.com/a/8056049/190596

于 2013-02-11T14:01:46.727 回答
1

这肯定也应该在服务器上处理,因为可以绕过 javascript 限制。但是,javascript 解决方案可以节省一些流量和时间:

var last_req = 0;
var limit = 5000; //miliseconds
function send_comment() {
  var time = new Date().getTime();
  if(time-last_req<limit)  {
    alert("Wait please");
    return false;
  }
  last_req = time;
  $.get("comment.php", {/*data*/}, function() {});
}
于 2013-02-11T14:05:29.253 回答
1

这可以简单地用一个布尔标志来完成......

// declare this globally at the top of your script
var allowAjax = true;


// this would be in some event handler (on enter keypress, for example)
if (allowAjax) {
    $.ajax({
        ...
        ...
    });
} else {
    // show message saying to wait
}

allowAjax = false;

setTimeout(function() {
    allowAjax = true;
}, 5000);
于 2013-02-11T14:13:00.823 回答
1

我会用这个:

if(timerStarted){
    window.clearTimeout(timeout);
}
timerStarted = true;
timeout = window.setTimeout(function(){
    timerStarted = false;
    // ajax call
, 5000}
于 2013-02-11T14:16:11.057 回答
0

这可能会帮助您完成您想做的事情:http: //jeykeu.wordpress.com/2012/03/09/jquery-prevent-multiple-ajax-requests/

您必须稍微修改它以添加一个计时器并使用它来测试是否有可能发出新请求。

于 2013-02-11T14:03:10.893 回答