我有一个文本字段,当用户键入时,AJAX 请求被发送到服务器以执行搜索并返回结果:
<input type="text" class="form-control player-list-control-text" id="name" name="name" autocomplete="off" />
$('.player-list-control-text').keyup(function(){
get_player_list();
});
function get_player_list(){
$.ajax({
url: '/player/list/get',
data: {
'club_id' : $('#club_id').val(),
'position_id' : $('#position_id').val(),
'name' : $('#name').val(),
'page' : players_page,
'sort_by' : sort_by,
'sort_order' : sort_order,
},
type: 'POST',
success: function(result) {
if(result.hasOwnProperty('error'))
show_msg('error', result.error);
else
load_players(result);
},
error: function (response) {
handle_error(response);
}
});
}
问题是,搜索需要一两秒的时间来执行,所以当用户快速输入,比如 5 个字符时,请求会变得混乱,要么需要很长时间,要么显示错误的结果 - 例如, 4 字母搜索的结果,而不是 5 字母搜索的结果。
我可以通过在客户端上保存请求时间或防止用户在处理前一个请求时输入来确保显示最后一个请求的结果,但这两种解决方案似乎都是不好的解决方案——第一个是因为它实际上并没有为服务器节省任何麻烦,第二次为糟糕的用户体验。
我真正在寻找的是一种在客户端发送新的 5 字母搜索查询时中断服务器上过时的 4 字母搜索中间执行的方法。
这可能吗?我该怎么办?
后端脚本包含多个查询,因为如果这完全相关,我们必须搜索多个表。
编辑:关于引发密切投票的类似问题,解决方案不是我所追求的。我想中断服务器端处理,而不仅仅是停止客户端上的请求。
呼如林
哆啦的时光机