3

キーを押すたびに ajax リクエストがある入力ボックスがあります。したがって、「名前」という単語を入力すると、4 つの成功した要求があります。したがって、実際には実行された最新のリクエストのみが必要です。したがって、「名前」という単語を入力すると、最後のリクエストとなるリクエストが1つだけになります。

また、これに対する解決策もあります(これはクリックメソッドを使用した簡単な例です)

JS スクリプト

var callid = 1;

function ajaxCall (checkval ){
    if(checkval == callid){
        $.ajax({
            type: 'post',
            url: baseurl + "test/call_ajax",
            data: {
                val: "1"
            },
            success: function(data) {
                console.log(data)
            }
        });
    }
}

function call(){
    var send = callid+=1;
    setTimeout( function(){ ajaxCall(send)  } , 500);
}

html スクリプト

<a href="#" onclick="call()" > Call ajax </a>

これは完全に機能しています。でも、もう少し洗練させる方法があればと思いました。

何か案は :)

4

3 に答える 3

4

イベントディスパッチのためのより良いインテントテクニックを探していると思います。

var eventDispatcher = null;
$('.textbox').keyup(function(){
   if(eventDispatcher) clearTimeout(eventDispatcher);
   eventDispatcher = setTimeout(function(){
       $.ajax({ ... });
   }, 300);
});
于 2013-05-01T17:45:35.437 に答える
3

setTimeout 内で ajax を実行できます。したがって、追加の変数を宣言してチェックしたり、call() のような別の関数を記述したりする必要はありません。

$(document).ready(function () {
    var timer;
    $('#fillMe').keypress(function () {
        clearTimeout(timer);
        timer = setTimeout(function () {
            //replace this with your ajax call
            var content = $('#fillMe').val();
            $('#result').text('You will only see this if the user stopped typing: ' + content);
        }, 1000); // waits 1s before getting executed
    });
});

<input type="text" id="fillMe">
<div id="result"></div>

キー押下イベントごとに、これによりタイムアウトがクリアされ、すぐに新しいタイムアウトが作成されます。つまり、setTimeout 関数の内容は、ユーザーが入力を 1 秒以上停止した場合にのみ実行されます。もちろん、1 秒は例としての値です。好きな時間に変更したり、適切な時間 (500ms など) に変更したりできます。

私のjsfiddleを見てください

于 2013-05-01T17:49:12.433 に答える
1

setTimeout は、保存して以前に設定したタイマーをクリアするために使用できる ID を返します。

var timerId;

function call() {
    if (timerId !== undefined) {
        clearTimeout(timerId);  
    } 

    timerId = setTimeout( function() { ajaxCall(send) }, 500);
}

この結果、最後の文字が入力されてから 500 ミリ秒後に ajaxCall メソッドが呼び出されるはずです。

于 2013-05-01T17:44:02.833 に答える