当前位置: 首页 > 知识库问答 >
问题:

在多个keydown事件后一秒钟执行AJAX搜索

皇甫高阳
2023-03-14

所以我用jquery做了一个自动完成。Ajax用于从远程位置获取大量xml文件。如果我搜索ex.“两个半男人”,它会用ajax进行大约16次查询(除了3次之外,每一次输入的字母,先看代码)。

我希望它在用户按下最后一个键后一秒钟执行Ajax请求,因此它将执行一个查询而不是16个查询。

因此,如果用户在上次按键事件后 1 秒之前按另一个键,则它尚不会执行查询。

<script>
    $(document).ready(function(){
        $('#tv_search').keydown(function(){
            var search = $(this).val();
            if(search.length >= 3)
            {
                $.ajax({
                  type: "GET",
                  url: "search.php",
                  data: {show : search, key : '890k4900k0ll' }
                }).done(function(msg){
                    $('#t').html(msg);
                });
            }
        });
    });
</script>

Search for series: <input type='text' name='tv_search' id='tv_search'>

有什么想法吗?

共有3个答案

姬天宇
2023-03-14

我有一个解决方案,可以让您延迟调用的任何方法,避免重复调用,这根本不会被使用!

https://stackoverflow.com/a/30503848/1834212

黄浩涆
2023-03-14

要避免在每次按键时生成多个AJAX请求,请尝试使用<code>setTimeout()setTimeout()方法应该包含AJAX请求,该请求在用户按键四分之一秒(250毫秒)后执行。

如果请求可用,我也abort()请求。

var timeOut = null,
    myXHR = null;
$(document).ready(function(){
    $('#tv_search').keydown(function(){
        // It will clear the setTimeOut activity if valid.
        if(timeOut) clearTimeout(timeOut);

        var search = $(this).val();
        if(search.length >= 3)
        {
            timeOut = setTimeout(function(){
              // Cancel the last request if valid
              if(myXHR) myXHR.abort();

              myXHR = $.ajax({
                type: "GET",
                url: "search.php",
                data: {show : search, key : '890k4900k0ll' }
              }).done(function(msg){
                  $('#t').html(msg);
              });
            }, 250);// wait for quarter second.
        }
    });
});
朱自明
2023-03-14

你可以使用超时,并在每次按键时清除它:

$(document).ready(function() {
    $('#tv_search').on('keyup', function() {
        clearTimeout($(this).data('timer'));
        var search = this.value;
        if (search.length >= 3) {
            $(this).data('timer', setTimeout(function() {
                $.ajax({
                    type: "GET",
                    url: "search.php",
                    data: {
                        show: search,
                        key: '890k4900k0ll'
                    }
                }).done(function(msg) {
                    $('#t').html(msg);
                });
            }, 1000));
        }
    });
});​
 类似资料:
  • 下面的函数不能像我希望的那样工作;作为一个JS新手,我不明白为什么。 我需要它等待5秒钟,然后检查是否为。 目前,它不等待,只是立即检查。

  • 问题内容: 我有一个搜索输入,当我输入内容时,该输入会将数据从输入发送到php文件。php文件对我的数据库进行搜索,并显示搜索选项列表。您知道,ajax风格的实时搜索。 我的问题是,如果您输入的内容非常快,即使输入了另外10个字母,它也可能只搜索前1或2个字母。这引起一些问题。 我的jQuery看起来像这样: 和 所以我很好奇,如何使脚本等到我完成输入后再运行该函数?我的逻辑是说,例如,如果200

  • 我有一个h:inputText的问题,我不知道如何解决它。 我正在使用JSF和RichFaces开发一个xhtml页面,其中包含日历、SelectOneMenu、InputExtArea和Input等字段。在我的表单末尾,有两个按钮“打印”和“保存”。 如果其中一个字段被修改(文本、日期等),我必须禁用打印按钮。在每个字段中,我都添加了ajax事件。 例如: 如果我的日期改变了,我调用存储在bea

  • 由于我对js和jquery相当陌生,我想知道是否可以将多个键绑定到一个事件。我尝试了、和,但没有运气。 我希望将和绑定在一个大小写中,而不是另一个大小写。

  • 问题内容: 我有一个ajax调用到一个php文件。我正在收到结果。现在,我正在研究是否有可能使ajax请求每1秒自动执行一次。我将结果发布到名为的输入字段中。如何每三秒钟执行一次ajax调用而不必调用该函数? 问题答案: 您可能要考虑的是服务器发送事件(SSE) 这是一种HTML5技术,JavaScript可以通过该技术“ 长期轮询 ”服务器端点(您的PHP文件)以查看是否发生了任何更改。长轮询基

  • 问题内容: 我有多个ajax查询同时运行,我希望它们等待最后一个返回,然后在所有ajax调用上运行成功处理程序。作为简化示例,请考虑: 假设所有请求都同时发送。由于它们是异步的,因此它们将在不同的时间返回。假设一个请求返回需要100毫秒,而另一个请求则需要3000毫秒。我显然不知道哪个会最先返回。他们都以某种方式更新了DOM,我希望一次将这些更改一次全部显示给查看器。我该怎么做呢? 我能想到的最好