减少即时搜索中的Ajax调用数量

abhig10

我正在尝试对我的网站进行即时搜索。除此之外,一切正常。

var timeOut;
$('#search input[name=\'search\']').on('keyup', function(e) {
    // If enter - submit the search field
    if (e.keyCode == 13) {
        $('header input[name=\'search\']').parent().find('button').trigger('click');
    }
    // Call only when length is at least 2 and the key pressed is alphanumeric
    else if ($('#search input[name=\'search\']').val().length>2 && ((e.keyCode>=65 && e.keyCode<=90) || (e.keyCode>=97 && e.keyCode<=122))) {
        timeOut = null;
        //alert(timeOut);

        if (!timeOut) {
            timeOut = setTimeout(function() {
                $.ajax({
                    url: 'ajax.php',
                    type: 'post',
                    async: false,
                    data:  'ACTION=SEARCH&search='+$('#search input[name=\'search\']').val(),
                    dataType: 'json',
                    beforeSend: function() {
                        $('#loader-icon').show();
                    },
                    complete: function() {
                        $('#loader-icon').hide();
                    },
                    success: function(json) {
                        //$('.product-list-row').html(json);
                        $('#search-listing').html(json['html']);
                    },
                    error: function(xhr, ajaxOptions, thrownError) {
                        alert(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText);
                    }
                });
                timeOut = null;
            }, 500);
        }
    }
});

问题1:我的脚本最终对服务器进行了太多调用,由于某种原因,脚本setTimeOut无法正常运行。仅当用户完成键入或类似操作时才进行Ajax调用,而不是在每次按键时都进行。

问题2:由于某些原因,当我快速键入内容时,输入栏不会被编辑。但是,ajax可以使用,但是使用最后的文本输入。

rk

setTimeout您可以使用jqXHRAJAX返回对象来中止上一个调用,而不必尝试通过解决该问题使用它更干净,更简单。也删除async: false,

var timeOut;
var xhr;
$('#search input[name=\'search\']').on('keyup', function(e) {
    // If enter - submit the search field
    if (e.keyCode == 13) {
        $('header input[name=\'search\']').parent().find('button').trigger('click');
    }
    // Call only when length is at least 2 and the key pressed is alphanumeric
    else if ($('#search input[name=\'search\']').val().length>2 && ((e.keyCode>=65 && e.keyCode<=90) || (e.keyCode>=97 && e.keyCode<=122))) {
        if(xhr && xhr.readyState != 4){
            xhr.abort();
        }   
        xhr = $.ajax({
            url: 'ajax.php',
            type: 'post',
            data:  'ACTION=SEARCH&search='+$('#search input[name=\'search\']').val(),
            dataType: 'json',
            beforeSend: function() {
                $('#loader-icon').show();
            },
            complete: function() {
                $('#loader-icon').hide();
            },
            success: function(json) {
                //$('.product-list-row').html(json);
                $('#search-listing').html(json['html']);
            },
            error: function(xhr, ajaxOptions, thrownError) {
                alert(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText);
            }
        });
    }
});

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在调用中减少模板参数的数量?

来自分类Dev

如何使用mongoosastic + AJAX进行即时搜索?

来自分类Dev

使用Ajax在JSP中即时隐藏消息

来自分类Dev

X天数中数量减少的分布

来自分类Dev

减少成员类中列表属性的数量

来自分类Dev

减少Excel中的单元格数量

来自分类Dev

减少Dart中包装器对象的数量

来自分类Dev

减少协调类中的依赖项数量

来自分类Dev

减少Swift中的括号数量

来自分类Dev

减少Excel中的单元格数量

来自分类Dev

X天数中数量减少的分布

来自分类Dev

减少协调类中的依赖项数量

来自分类Dev

减少Swift中的括号数量

来自分类Dev

减少 Room DataBase Repository 中的 AsyncTask 数量

来自分类Dev

在angular js的搜索功能中处理多个Ajax调用

来自分类Dev

如何限制ASG中的即时实例池的数量?

来自分类Dev

减少课堂上的getter和setter调用数量

来自分类Dev

如何在Algolia即时搜索中实现多个分页实例?

来自分类Dev

即时翻译jqGrid中的搜索运算符

来自分类Dev

如何映射减少在mongodb中的朋友搜索

来自分类Dev

实现即时搜索功能

来自分类Dev

ReactiveUI 5即时搜索

来自分类Dev

Android即时实时搜索

来自分类Dev

Ajax中的Ajax调用

来自分类Dev

这是在C#中即时调用的最佳方法吗

来自分类Dev

Grails中的AJAX搜索

来自分类Dev

减少python中的函数调用开销

来自分类Dev

如何减少Rails中的外部API调用

来自分类Dev

在减少调用中返回的箭头函数