3

ユーザーがEnterキーを押してコメントを投稿できるコメントボックスがあります。AJAX(jQuery)リクエストを使用してこれを行います。前のコメントから 5 秒以内にイベントを発生させずにメッセージを表示する良い方法はありますか? または、これはサーバー側で処理する必要がありますか?

4

5 に答える 5

5

ユースケースに応じて、throttleまたはdebounce

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

または、この投稿をご覧ください:

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

于 2013-02-11T14:01:46.727 に答える
1

私はこれを使用します:

if(timerStarted){
    window.clearTimeout(timeout);
}
timerStarted = true;
timeout = window.setTimeout(function(){
    timerStarted = false;
    // ajax call
, 5000}
于 2013-02-11T14:16:11.057 に答える
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 に答える
0

これは、あなたがやりたいことに役立つかもしれません: http://jeykeu.wordpress.com/2012/03/09/jquery-prevent-multiple-ajax-requests/

少し変更してタイマーを追加し、それを使用して新しいリクエストが可能かどうかをテストする必要があります。

于 2013-02-11T14:03:10.893 に答える