1
$(function(){
   $("input[type=text]").keypress(function(){
        $("#loader").load("saveinputtodatabase.php", {...});
   });
});

これは私のコードではうまくいきます。ユーザーが入力に何かを入力するたびに、データベースにデータを保存します。しかし、これはサーバーにとって公平ではないことを私は知っています。これは、同じファイルを何度もロードするため、帯域幅が必要以上に使用されるためです。

ユーザーがキーを押してから 10 秒が経過した場合にのみ、「saveinputtodatabase.php」をロードするにはどうすればよいですか?

4

6 に答える 6

2

setTimeoutそのためにとを使用できますclearTimeout

$(function(){
  var timeout = 10000; // 10 seconds
  var tmt = null;
  $("input[type=text]").keypress(function() {
    if (tmt) clearTimeout(tmt);
    tmt = setTimeout(function() {   
      $("#loader").load("saveinputtodatabase.php", {...});
    }, timeout);
  });
});
于 2012-05-13T07:45:45.053 に答える
1
var timeout;
$('input[type=text]').keypress(function() {
    if(timeout) {
        clearTimeout(timeout);
        timeout = null;
    }    
    timeout = setTimeout(somefunc, 10000)
});
function somefunc() {
  $("#loader").load("saveinputtodatabase.php", {...});
}
于 2012-05-13T07:46:59.860 に答える
0
$(function(){
   $("input[type=text]").keypress(function(){
        var t=setTimeout(function(){
             $("#loader").load("saveinputtodatabase.php", {...})
        },10000);
   });
});
于 2012-05-13T07:45:57.237 に答える
0

これを試して

$(function(){
   $("input[type=text]").keypress(function(){
    save();        
});
});
function save(){
setTimeout($("#loader").load("saveinputtodatabase.php", {...}),10000)
}
于 2012-05-13T07:48:11.937 に答える
0

これらの underscore.js 関数を確認してください。

http://documentcloud.github.com/underscore/#throttle

渡された関数のスロットルされた新しいバージョンを作成して返します。これは、繰り返し呼び出されたときに、実際には待機ミリ秒ごとに最大 1 回だけ元の関数を呼び出します。追いつくことができないほど速く発生するレート制限イベントに役立ちます。

http://documentcloud.github.com/underscore/#debounce

渡された関数の新しいデバウンスされたバージョンを作成して返します。この関数は、最後に呼び出されてから待機ミリ秒が経過するまで実行を延期します。入力が到着しなくなった後にのみ発生するはずの動作を実装するのに役立ちます。たとえば、Markdown コメントのプレビューのレンダリング、ウィンドウのサイズ変更が停止した後のレイアウトの再計算などです。

于 2012-05-13T07:51:31.773 に答える
0
$('textarea').on('keyup', _.throttle(_.debounce(function() {
$.ajax(...);
}, 2000), 60000));

これにより、ユーザーが少なくとも 2 秒間入力を停止するとすぐにデータが保存されますが、1 分に 1 回以上は保存されません。詳細については、underscore.js をチェックしてください

于 2012-05-13T07:54:35.080 に答える