jQuery 向远程发送请求时忽略前导和尾随空格 URL
jQuery ignore leading and trailing whitespace while sending request to remote URL
我目前正在尝试制作一个简单的 jQuery 自动完成 UI,其中搜索词被发送回 PHP 后端,后者又查询 MySQL用于匹配术语并发回结果的数据库。这工作正常..除了,如果我输入 3-4 个空格,它也会发送一个请求,并且这个 returns 所有结果都来自后端。如何配置 jQuery 自动完成,以便无论输入什么词,应该进入后端的搜索词都应该修剪其前导和尾随空格,并且在修剪后,如果发现它是一个空字符串, 根本不发送请求?
我在 SO 中找到了多个示例,但它们都涉及一个内置的术语数组作为示例,如果 source
参数的值为 remote URL:
$("#myinput").autocomplete({
source: "http://127.0.0.1:8000/autoComplete/",
appendTo: "#search-holder",
response: function(e,y) {}
});
使用trim()
从字符串的结尾和开头删除白色-space?
https://api.jquery.com/jQuery.trim/
或者您可以在后端进行。
http://php.net/manual/en/function.trim.php
编辑:
为什么不在加载页面并将它们存储在数组中时通过 AJAX 调用一次获取所有可用的自动完成。这样,当页面加载时,数据库只会被打扰一次,而不是每次输入字段发生变化时。此外,这会占用数据库的一些工作量,而白色 space 不会成为问题。
按如下方式更新您的 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);
}));
}
这个问题没有简单的答案。我认为 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 自动完成 UI,其中搜索词被发送回 PHP 后端,后者又查询 MySQL用于匹配术语并发回结果的数据库。这工作正常..除了,如果我输入 3-4 个空格,它也会发送一个请求,并且这个 returns 所有结果都来自后端。如何配置 jQuery 自动完成,以便无论输入什么词,应该进入后端的搜索词都应该修剪其前导和尾随空格,并且在修剪后,如果发现它是一个空字符串, 根本不发送请求?
我在 SO 中找到了多个示例,但它们都涉及一个内置的术语数组作为示例,如果 source
参数的值为 remote URL:
$("#myinput").autocomplete({
source: "http://127.0.0.1:8000/autoComplete/",
appendTo: "#search-holder",
response: function(e,y) {}
});
使用trim()
从字符串的结尾和开头删除白色-space?
https://api.jquery.com/jQuery.trim/
或者您可以在后端进行。 http://php.net/manual/en/function.trim.php
编辑: 为什么不在加载页面并将它们存储在数组中时通过 AJAX 调用一次获取所有可用的自动完成。这样,当页面加载时,数据库只会被打扰一次,而不是每次输入字段发生变化时。此外,这会占用数据库的一些工作量,而白色 space 不会成为问题。
按如下方式更新您的 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);
}));
}
这个问题没有简单的答案。我认为 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);
});
}
}
});