【发布时间】:2019-12-25 10:57:55
【问题描述】:
我有一个文本字段,当用户键入时,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 字母搜索中间执行。
这可能吗?我该怎么办?
后端脚本包含多个查询,因为我们必须搜索多个表(如果它们完全相关)。
编辑:关于引发密切投票的类似问题,解决方案不是我所追求的。我想中断服务器端处理,而不仅仅是停止客户端上的请求。
【问题讨论】:
-
这能回答你的问题吗? Abort previous ajax request on new request
-
@EliasSoares 请在上述问题的末尾查看我的编辑。
-
是的。一旦http请求被取消,服务器端就会死掉。
标签: javascript php laravel