Javascript jQuery在向远程URL发送请求时忽略前导和尾随空格

Javascript jQuery在向远程URL发送请求时忽略前导和尾随空格,javascript,jquery,jquery-ui,jquery-ui-autocomplete,Javascript,Jquery,Jquery Ui,Jquery Ui Autocomplete,我目前正在尝试制作一个简单的jQuery自动完成UI,其中搜索词被发送回PHP后端,PHP后端反过来查询MySQL数据库中的匹配词并发送回结果。这很好。除了,如果我输入3-4个空格,它也会发送一个请求,这会从后端返回所有结果。我如何配置jQuery autocomplete,使得无论键入了什么术语,应该进入后端的搜索术语的前导和尾随空格都应该被修剪,并且在修剪之后,如果发现它是一个空白字符串,则根本不发送请求 我在SO中找到了多个示例,但它们都涉及一个内置的术语数组。例如,如果source参数的

我目前正在尝试制作一个简单的jQuery自动完成UI,其中搜索词被发送回PHP后端,PHP后端反过来查询MySQL数据库中的匹配词并发送回结果。这很好。除了,如果我输入3-4个空格,它也会发送一个请求,这会从后端返回所有结果。我如何配置jQuery autocomplete,使得无论键入了什么术语,应该进入后端的搜索术语的前导和尾随空格都应该被修剪,并且在修剪之后,如果发现它是一个空白字符串,则根本不发送请求

我在SO中找到了多个示例,但它们都涉及一个内置的术语数组。例如,如果
source
参数的值是remote URL,我无法确定如何配置该参数:

$("#myinput").autocomplete({
        source: "http://127.0.0.1:8000/autoComplete/",
        appendTo: "#search-holder",
        response: function(e,y) {}
});
是否使用
trim()
删除字符串结尾和开头的空白?

或者你也可以在后端完成。

编辑: 为什么不在加载页面并将其存储在数组中时,使用AJAX调用一次性获取所有可用的自动完成呢。这样,DB只会在加载页面时被打扰一次,而不是每次输入字段发生更改时。此外,这将占用数据库的一些工作负载,并且空白不会成为问题。

使用
trim()
删除字符串末尾和开头的空白?

或者你也可以在后端完成。

编辑:
为什么不在加载页面并将其存储在数组中时,使用AJAX调用一次性获取所有可用的自动完成呢。这样,DB只会在加载页面时被打扰一次,而不是每次输入字段发生更改时。此外,这将占用数据库的一些工作负载,并且空白不会成为问题。

更新
源代码
函数,如下所示:

    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);
      }));   
    }

更新
源代码
函数,如下所示:

    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);
      }));   
    }

这个问题没有简单的答案。我以为
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);
            });
      }
   }
}); 

这个问题没有简单的答案。我以为
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);
            });
      }
   }
}); 


我知道如何修剪文本,问题是,如何告诉jQuery,如果修剪后的文本长度为零,则根本不发送请求?是的,我可以在后端执行,这意味着请求已经发出。如果搜索词只是空白,我甚至不想发送请求。将会有超过1000万个结果。在前端缓存它们会对用户的内存造成很大影响。我知道如何修剪文本,问题是,如何告诉jQuery,如果修剪后的文本长度为零,则根本不发送请求?是的,我可以在后端这样做,这意味着请求已经发出。如果搜索词只是空白,我甚至不想发送请求。将会有超过1000万个结果。将它们缓存在前端会对用户的内存造成很大影响。你在哪里提到了远程URL?@SexyBeast在响应代码resoruces中会包含远程资源,正如我看到的一样。不,我仍然不理解它。你能给出一个完整的例子,说明在哪里提供URL吗?你在哪里提到了远程URL?@SexyBeast在响应代码resoruces中将包含远程资源,正如我看到的那样。不,我仍然不明白。你能给出一个完整的例子,说明在哪里提供URL吗?谢谢。这里的
response
函数是什么?它是一个回调函数,通知自动完成请求已完成。工作起来很有魅力!谢谢谢谢这里的
response
函数是什么?它是一个回调函数,通知自动完成请求已完成。工作起来很有魅力!谢谢