我正在使用以下代码(written by another user)在 livesearch 函数中限制 ajax 请求:
JSFiddle 如果您喜欢演示:http://jsfiddle.net/4xLVp/
不过,这似乎有问题。使用 Ctrl+shift+back-arrow
清除值,然后再次输入会导致一系列请求。空白值也会引起请求。这似乎不对,特别是与 jQuery UI autocomplete 相比,其中请求延迟似乎更加可衡量。
$('##tag-search').keyup(function() {
var elem = $(this);
if (elem.val().length >= 2) {
elem.data('search',search).clearQueue().stop().delay(1000).queue(function() {
$.ajax({ // ajax stuff
'success': function(data){ /*show result*/ }
});
if (elem.data('search') != string) return;
});
} else if (string.length <= 1) { /*show original content*/ }
});
有没有更好的方法来处理这个问题?
最佳答案
我只会使用setTimeout
:
(function() {
var timeout;
$('#tag-search').keyup( function() {
var elem = $(this);
if (elem.val().length >= 2) {
clearTimeout(timeout);
timeout = setTimeout(function() {
$.ajax({ // ajax stuff
'success': function(data){ /*show result*/ }
});
}, 80); // <-- choose some sensible value here
} else if (string.length <= 1) { /*show original content*/ }
});
}());
还有一个debounce/throttle插件。
关于jquery - 限制ajax请求的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6967785/