我为我的网站创建了一个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%知道该怎么做…
您所指的方法称为“反跳”
我通常在所有脚本的底部都有一个“防弹跳”功能
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*/
));
问题内容: Facebook Ajax如何工作?2-3个月前,他们使用#,但现在整个地址栏都在变化。 问题答案: 所使用的第一种方法称为“ Ajax爬行 ”。 但是我认为您正在谈论的新方法仅仅是HTML5 History API 。Github正在使用这种方法来浏览树,您可以在此处了解更多信息。(我建议所有读者阅读和观看视频,因为它非常有帮助) 编辑: 只是要指出,Facebook肯定在使用HTM
问题内容: 我正在将Ajax手风琴用于多个窗格。在回发时,当前打开的窗格始终重置为第一个窗格。 有什么办法可以解决这个问题? 谢谢 抢。 问题答案: 我通过在查询字符串中传递当前窗格索引,然后将当前窗格设置回目标页面的Page_Load事件中的索引,来解决此问题。 谢谢, 抢。
camelCase 很糟 你曾维护过别人的代码吗?你维护过像这样的代码吗? my $variableThatContainsData = someSubroutineThatMucksWithData( $someAwfulVariable ); 混合大小写单词在 Perl 世界被称为 camelCase,通常它的令人不悦之处是使 阅读代码更难。 甚至具有糟糕名称的代码使用下划线也能变得
问题内容: 标题几乎总结了一下。 外部样式表具有以下代码: 我尝试使用: 和 但都行不通。是否有可能使用javascript覆盖!important样式。 如果有区别的话,这是给 greasemonkey扩展的。 问题答案: 我相信这样做的唯一方法是将样式添加为带有’!important’后缀的新CSS声明。最简单的方法是将新的元素附加到文档的开头: 使用上述方法添加的规则(如果使用!import
Style Java 传统的代码风格是被用来编写非常复杂的企业级 JavaBean。新的代码风格看起来会更加整洁,更加正确,并且更加简单。 Structs 对我们程序员来说,包装数据是最简单的事情之一。下面是传统的通过定义一个 JavaBean 的实现方式: public class DataHolder { private String data; public DataHold
如果一定要把一般的API 服务转换成restful风格,可以自定义控制器。例如上一节的服务例子: 方法 restful url 功能 原 url 原方法 GET /website 查询记录列表 /website/list.java GET POST /website 创建一条记录 /website/insert.java POST GET /website/id 根据id查询记录 /website