2017-04-15 51 views
0

我正在尝试制作一个简单的jQuery自动完成UI,其中搜索项被发回到PHP后端,后者又查询MySQL数据库以查找匹配的术语并发送返回结果。这工作正常..除此之外,如果我输入3-4个空格,它也会发送一个请求,并且这将返回来自后端的所有结果。如何配置jQuery自动完成功能,以便无论输入什么词语,应该到达后端的搜索词都应该将其前后空格进行修剪,并且在修剪后,如果发现它是空白字符串,则不发送请求在所有?jQuery在向远程URL发送请求时忽略前导空白和尾随空格

我发现SO多个例子,但它们都涉及术语例如内置阵列,我无法弄清楚如何配置source参数,如果它的值是远程URL:

$("#myinput").autocomplete({ 
     source: "http://127.0.0.1:8000/autoComplete/", 
     appendTo: "#search-holder", 
     response: function(e,y) {} 
}); 

回答

1

有这一个没有简单的答案。我认为search事件允许术语覆盖,但它并没有。 Nagaraju的回答是正确的,只有他没有显示出实际的执行情况。下面是它看起来应该像

$("#myinput").autocomplete({ 
    source : function(request, response){ 
     //trim the input value 
     request.term = request.term.trim(); 
     if(request.term == ""){ 
      //when empty, returns empty result 
      response([]); 
     }else{ 
      //our own implementation of request to the server 
      $.get("http://127.0.0.1:8000/autoComplete/?term=" + request.term, 
      function(data) { 
       response(data); 
      }); 
     } 
    } 
}); 
+0

谢谢。这里的“响应”功能是什么? – SexyBeast

+0

这是一个回调,通知自动完成请求完成 – xar

+0

工程就像一个魅力!谢谢! – SexyBeast

-1

使用trim()从字符串的结尾和开始处移除空格? https://api.jquery.com/jQuery.trim/

或者你可以在后端做到这一点。 http://php.net/manual/en/function.trim.php

编辑: 为什么不干脆让所有可用的自动完成的,一旦有一个AJAX调用时加载的页面,并将它们存储在数组中。这样数据库只会在加载页面时被打扰一次,而不是每次输入字段发生变化。此外,这将需要一些数据库的工作量和白色空间不会是一个问题。

+0

我知道如何修剪文本,问题是,如何告诉jQuery的,如果修剪的文本长度为零,不是在所有发送的请求? – SexyBeast

+0

是的,我可以在后端做,这意味着请求已经完成。如果搜索词只有空格,我甚至不想发送请求。 – SexyBeast

+0

会有超过1000万的结果。将它们缓存在前端将会对用户的内存造成负面影响。 – SexyBeast

1

更新您的source功能如下:

source: function(request, response) { 
     //Remove spaces 
     var matcher = new RegExp($.trim(request.term).replace(/ +/g, ""), "i"); 
     response($.grep(resources, function(value) { 
     return matcher.test(value); 
     })); 
    } 
+0

你在哪里提到远程URL? – SexyBeast

+0

http://stackoverflow.com/a/4041382/1848140 @SexyBeast有帮助吗? – Nagaraju

+0

@SexyBeast响应代码resoruces将包含远程资源,因为我看到它 – Nagaraju