所以我使用 jquery 制作自动填充。 Ajax用于从远程位置获取重xml文件。如果我搜索前。 “两个半人”大约16个查询(对于每个字母,除了3个,先查看代码)和ajax。
我希望在用户按下最后一个键后一秒钟执行Ajax请求,这样它将执行一个查询而不是16个。
因此,如果用户在上次keydown事件发生之前的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'>
有什么想法吗?
答案 0 :(得分:6)
您可以使用超时,并在每次按下键时清除它:
$(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));
}
});
});
答案 1 :(得分:3)
为了避免在每次按键时生成多个AJAX请求,请尝试使用setTimeout()
和clearTimeout()
方法,以取消上次超时并通过调用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.
}
});
});
答案 2 :(得分:0)
我有一个解决方案,允许你延迟你调用的任何方法,避免重复调用,根本不会使用!
答案 3 :(得分:0)
退出简单的解决方案:
<script>
$(document).ready(function(){
var mytimer;
$('#tv_search').keydown(function(){
clearTimeout(mytimer);
var search = $(this).val();
if(search.length >= 3)
{
mytimer = setTimeout(function(){
$.ajax({
type: "GET",
url: "search.php",
data: {show : search, key : '890k4900k0ll' }
}).done(function(msg){
$('#t').html(msg);
});
}, 1000);
}
});
});
“ mytimer ”必须是全局变量,只需在每个事件调用中清除之前的“ mytimer ”即可。它只会以1秒的间隔执行最新的呼叫。