我想使jQuery UI自动完成具有多个值和远程(https://jqueryui.com/autocomplete/#multiple-remote)。
现在我有以下代码:
JS
$(function() {
function split( val ) {
return val.split( /,\s*/ );
}
function extractLast( term ) {
return split( term ).pop();
}
$("#retr")
.bind( "keydown", function( event ) {
if ( event.keyCode === $.ui.keyCode.TAB &&
$( this ).autocomplete( "instance" ).menu.active ) {
event.preventDefault();
}
})
.autocomplete({
source: function( request, response ) {
$.getJSON( "retr/retr_arry.php", {
term: extractLast( request.term )
}, response );
},
search: function() {
var term = extractLast( this.value );
if ( term.length < 3 ) {
return false;
}
},
focus: function() {
return false;
},
select: function( event, ui ) {
var terms = split( this.value );
terms.pop();
terms.push( ui.item.value );
terms.push( "" );
this.value = terms.join( ", " );
return false;
}
});
});
的HTML
<input id="retr" type="text" placeholder="Please select the user(s)">
的PHP
//Database connect...
if (isset($_POST["term"])) {
$input_term = $_POST["term"];
} else {
exit;
}
$username = array();
$term2 = '%'.$term.'%';
//SQL
$sql = $db->prepare("SELECT username FROM users WHERE username LIKE ?");
$sql->bind_param('s', $term2);
if ($sql->execute()) {
$sql->store_result();
$sql->bind_result($username);
while ($sql->fetch()) {
$usernames[] = $username;
}
echo (json_encode($usernames));
} else {
exit;
}
问题
我没有自动完成。当我输入最多5个字母时,仍然没有结果。
编辑
将POST更改为GET之后(在PHP文件中),我得到了结果。但是结果没有正确排序。
例如:如果输入“ adm”,则会得到“ SYSTEM”。我怎样才能解决这个问题?我认为问题出在PHP的SQL部分。
if (array_key_exists("term", $_POST)) {
$term2 = '%'.$_POST["term"].'%';
} else {
exit;
}
$username = array();
//SQL
$sql = $db->prepare("SELECT username FROM users WHERE username LIKE ?");
$sql->bind_param('s', $term2);
if ($sql->execute()) {
$sql->store_result();
$sql->bind_result($username);
while ($sql->fetch()) {
$usernames[] = $username;
}
echo json_encode($usernames);
} else {
exit;
}
而不是使用exit ...最好返回错误消息/返回正确的HTTP状态,因此您可以处理这种情况,而不必删除它们并使JavaScript崩溃。
更新:提示:不要使用mysqli,而要使用PDO。PDO具有前瞻性,并支持许多数据库驱动程序。因此很容易切换它们,依此类推。PDO更容易,您的代码可能更小,更好地理解。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句