<script type="text/javascript">
var delay = (function() {
var timer = 0;
return function(callback, ms) {
clearTimeout(timer);
timer = setTimeout(callback, ms);
};
})();
$(function() {
$('#activity').change(function() {
$(this).val() == "SID" ? $('.SIDContainer').show() : $('.SIDContainer').hide();
});
$('.SID').keyup(function() {
delay(function() {
$.ajax({
url: '../SentinelOperationsUI/GenericHandler.ashx',
data: { 'SID': $(this).val() },
dataType: 'json',
success: function(data) {
if (data.SID != null) {
$('.SIDResult').text('Match: ' + ' SID: ' + data.SID);
console.log(data);
}
}
});
}, 500);
});
});
代码无延迟功能。但我想在这里延迟,因为否则可能会为同一个值发送多个ajax请求(如果输入足够快)。知道可能导致这种情况的原因吗?关于这个问题的其他解决方案可能吗感谢
答案 0 :(得分:0)
为什么不将ajax调用分配给变量,而不是使用延迟,然后使用每个新的keyup事件检查它是否为null。类似的东西:
var ajaxcall;
$('.SID').keyup(function() {
if ( ajaxcall != null ){
ajaxcall.abort();
}
ajaxcall = $.ajax({
url: '../SentinelOperationsUI/GenericHandler.ashx',
data: { 'SID': $(this).val() },
dataType: 'json',
success: function(data) {
if (data.SID != null) {
$('.SIDResult').text('Match: ' + ' SID: ' + data.SID);
console.log(data);
}
}
});
});
这将确保每个keyup操作都会跨越新的ajax事件并取消之前的任何事件。