当前位置:  开发笔记 > 编程语言 > 正文

Facebook风格AJAX搜索

如何解决《Facebook风格AJAX搜索》经验,为你挑选了1个好方法。

我已经为我的网站创建了一个Facebook风格的ajax搜索,当你输入它时,它会将结果显示在搜索下方的一个很好的列表中.

$("#s").keyup(function() {
    var searchbox = $(this).val();
    var dataString = 's='+ searchbox;
    if(searchbox!='') {
        $.ajax({
            type: "POST",
            url: "/livesearch.php",
            data: dataString,
            cache: false,
            success: function(html){
                $("#display").html(html).show();
            }
        });
    } else {return false; }  
});

$("body").click(function() {
        $("#display").hide();
});

这个问题是它有点无效,因为用户会输入一个单词,例如"football".这将向服务器执行8个请求.什么是更有效的方法来做到这一点?理想情况下,我认为它应该在进行搜索之前存储1秒的请求而不是即时密钥.但不是100%肯定如何做到这一点......



1> ekhaled..:

你所指的方法叫做"Debouncing"

我通常在所有脚本的底部都有一个"去抖动"功能

var debounce=function(func, threshold, execAsap) {
    var timeout;
    return function debounced () {
        var obj = this, args = arguments;
        function delayed () {
            if (!execAsap)
                func.apply(obj, args);
            timeout = null; 
        };
        if (timeout)
            clearTimeout(timeout);
        else if (execAsap)
            func.apply(obj, args);
        timeout = setTimeout(delayed, threshold || 100); 
    }; 
};

然后每当我做任何可以从去抖动中受益的东西时,我都可以使用它

因此,您的代码将被重写为

$("#s").keyup(debounce(function() {
    var searchbox = $(this).val();
    var dataString = 's='+ searchbox;
    if(searchbox!='') {
        $.ajax({
                type: "POST",
                url: "/livesearch.php",
                data: dataString,
                cache: false,
                success: function(html){
                        $("#display").html(html).show();
                }
        });
    } else {return false; }  
}
,350 /*determines the delay in ms*/
,false /*should it execute on first keyup event, 
       or delay the first event until 
       the value in ms specified above*/
));

推荐阅读
小色米虫_524
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有