keyup(function())ajax请求延迟 - jQuery

时间:2012-05-31 10:56:34

标签: javascript ajax jquery

我有一个jQuery Ajax请求,我想用文本输入调用,所以我将它嵌套在keyup(function()中。这很好。

$("#text_box").keyup(function() {
 //AJAX REQUEST
});

但这有时候会出现问题。当我输入一些文本非常快时,我得到输入字的结果,原始输入字的一些最后字母被省略(可能是浏览器的一些错误)。我希望在没有输入活动一秒钟时发送ajax请求,我的意思是,如果我输入文本非常快并且休息一秒钟(意味着我做了输入)。我怎么能这样做?

3 个答案:

答案 0 :(得分:6)

听起来好像是从之前的ajax调用中获得结果。使用带setTimeoutclearTimeout的计时器。

var timer = null;

$("#text_box").keyup(function() {
  if(timer) {
    clearTimeout(timer);
  }

  timer = setTimeout(someFunction, someDelay);
});

其中someFunction是一个执行ajax调用的函数,而someDelay是您在执行调用之前要等待的延迟,在用户键入之后,以ms为单位。

答案 1 :(得分:2)

由于您已经在使用jQuery,因此可以使用Ben Aleman的debounce插件。

页面上的示例

// Bind the not-at-all debounced handler to the keyup event.
  $('input.text').keyup( text_1 );

  // Bind the debounced handler to the keyup event.
  $('input.text').keyup( $.debounce( 250, text_2 ) ); // This is the line you want!

答案 2 :(得分:1)

OMG。对于那些将在2014年进行搜索的人...

function sendAjax() {
    setTimeout(
        function() {
            $.ajax({
                url: "url.php",
                type: "POST",
                data: data,
                success: function(data) {
                    $("#result").html(data);
                }
            });
        }, 2000);
}

<input onkeyup="function()">