如何使用jquery带来ajax搜索onkeyup
我的脚本叫ajax
function search_func(value) { $.ajax({ type: "GET", url: "sample.php", data: {'search_keyword' : value}, dataType: "text", success: function(msg){ //Receiving the result of search here } }); }
HTML
问题: onkeyup我使用ajax来获取结果。 一旦ajax结果延迟增加,我就会出现问题。
例如在键入t
关键字时,我收到ajax结果,在键入te
时,当两个键盘之间的ajax时间延迟有时会产生严重问题时,我会收到ajax结果。
当我快速打字时。 ajax搜索t
关键字来得晚,与te
。 我不知道如何处理这类案件。
结果由于ajax延迟而快速键入te
关键字。 t
关键字的结果来了。
我相信我已经解释了读者的知识。
您应该检查值是否随时间变化:
var searchRequest = null; $(function () { var minlength = 3; $("#sample_search").keyup(function () { var that = this, value = $(this).val(); if (value.length >= minlength ) { if (searchRequest != null) searchRequest.abort(); searchRequest = $.ajax({ type: "GET", url: "sample.php", data: { 'search_keyword' : value }, dataType: "text", success: function(msg){ //we need to check if the value is the same if (value==$(that).val()) { //Receiving the result of search here } } }); } }); });
编辑:
添加了searchRequest
变量以防止对服务器发出多个不必要的请求。
保持$.ajax()
返回的XMLHttpRequest
对象,然后在下一个keyup上调用.abort()。 这应该会杀死之前的ajax请求并允许你执行新的请求。
var req = null; function search_func(value) { if (req != null) req.abort(); req = $.ajax({ type: "GET", url: "sample.php", data: {'search_keyword' : value}, dataType: "text", success: function(msg){ //Receiving the result of search here } }); }
尝试使用jQuery UI自动完成 。 为您节省许多低级编码。
首先我会建议在每个keyup上调用ajax是不好的(这就是为什么你在这个问题上运行)。
第二,如果你想使用keyup然后在输入框后显示一个加载图像,以向用户显示其仍然加载(使用加载图像,就像你开始添加评论)
几个指针。 首先,语言是javascript的弃用属性。 在HTML(5)中,您可以关闭该属性,或使用type =“text / javascript”。 其次,你正在使用jQuery,那么为什么你还可以使用jQuery进行内联函数调用呢?
$(函数(){ //文件准备就绪 $( “#sample_search”)。KEYUP(函数() { $就({ 类型:“GET”, url:“sample.php”, data:{'search_keyword':value}, dataType:“text”, 成功:function(msg) { //在此处接收搜索结果 } }); }); });
我建议在keyup事件和调用ajax函数之间留一点延迟。 您可以做的是使用setTimeout检查用户是否已完成输入,然后再调用您的ajax函数。