jQuery在向远程URL发送请求时忽略前导空白和尾随空格
问题描述:
我正在尝试制作一个简单的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) {}
});
答
有这一个没有简单的答案。我认为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);
});
}
}
});
答
使用trim()
从字符串的结尾和开始处移除空格? https://api.jquery.com/jQuery.trim/
或者你可以在后端做到这一点。 http://php.net/manual/en/function.trim.php
编辑: 为什么不干脆让所有可用的自动完成的,一旦有一个AJAX调用时加载的页面,并将它们存储在数组中。这样数据库只会在加载页面时被打扰一次,而不是每次输入字段发生变化。此外,这将需要一些数据库的工作量和白色空间不会是一个问题。
答
更新您的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);
}));
}
谢谢。这里的“响应”功能是什么? – SexyBeast
这是一个回调,通知自动完成请求完成 – xar
工程就像一个魅力!谢谢! – SexyBeast