2016-05-31 105 views
1

从下面的jQuery代码我初始化了预输入插件自动完成仅适用于空间

var users=new Bloodhound({ 

    datumTokenizer:Bloodhound.tokenizers.obj.whitespace('username'), 
    queryTokenizer:Bloodhound.tokenizers.whitespace, 

    remote: { 
     url: 'users.php?query=%QUERY', 
     wildcard: '%QUERY' 
     } 

}); 

users.initialize(); 

$("#SearchCustomer").typeahead({ 
    hint: true, 
    highlight: true, 
    minlength: 2, 



},{ 
    name: 'users', 
    display:'username',  
    source:users.ttAdapter(), 
    templates: { 
     suggestion: function (users) { 
     return '<p><a href="index.php?userid='+users.CustomerId+'" style="color:inherit;text-decoration:none;width:100%">'+users.username+'</a></p>'; 
     } 
    } 

比如我的数据库是这样的:

1.Harley
2.Harley戴维森

当我在搜索框中输入“Har”时,“Harley”仅显示在建议中。 “Harley Davidson”仅在我在末尾输入“Harley”时才显示空格。有人可以建议如何克服这个错误?

这是我users.php文件

<?php 

header('Content-Type:application/json'); 

if(!isset($_GET['query'])) 
{ 
echo json_encode([]); 
exit(); 
} 
$mysqli=new PDO("mysql:host=127.0.0.1;dbname=website","root",""); 

$users=$mysqli->prepare("SELECT id,username FROM users WHERE username LIKE   :query"); 

$users->execute(['query'=>"{$_GET['query']}%"]); 

echo json_encode($users->fetchAll()); 
?>  
+0

我们可以在数据库查询发生的地方看到users.php代码吗?您是否调试过PHP代码以确保在搜索框中键入的内容是查询中包含的内容? –

+0

@Cᴏʀʏ我修改了这个问题,并包含users.php文件 – Dilkush

+0

从url返回的数据是什么样的?如果您使用像POSTMan这样的工具来调用url,它是否工作? – whipdancer

回答

0

我复制你的代码,并添加js文件和作品。让我告诉我的代码

的index.php

<!DOCTYPE html> 
<html> 
<head> 
    <meta charset="utf-8"> 
    <meta http-equiv="X-UA-Compatible" content="IE=edge"> 
    <title></title> 
    <link rel="stylesheet" href=""> 
</head> 
<body> 
<input type="text" id="SearchCustomer"> 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.2/jquery.min.js"></script> 
    <script src="typeahead.js-master/dist/typeahead.bundle.js"></script> 
<script> 
    var users=new Bloodhound({ 

    datumTokenizer:Bloodhound.tokenizers.obj.whitespace('username'), 
    queryTokenizer:Bloodhound.tokenizers.whitespace, 

    remote: { 
     url: 'users.php?query=%QUERY', 
     wildcard: '%QUERY' 
     } 

}); 

users.initialize(); 

$("#SearchCustomer").typeahead({ 
    hint: true, 
    highlight: true, 
    minlength: 2, 



},{ 
    name: 'users', 
    display:'username',  
    source:users.ttAdapter(), 
    templates: { 
     suggestion: function (users) { 
     return '<p><a href="index.php?userid='+users.CustomerId+'" style="color:inherit;text-decoration:none;width:100%">'+users.username+'</a></p>'; 
     } 
    } 
}); 
</script> 

</body> 
</html> 

users.php

<?php 

header('Content-Type:application/json'); 

$users = array(
    array('CustomerId'=> 'example', 'username'=> 'Harley'), 
    array('CustomerId'=> 'another example', 'username'=> 'Harley Davidson') 
); 

echo json_encode($users); 
?> 

我没有使用的数据基础,所以有可能从数据库来的数据与一些未来垃圾。

我希望这可以得到一些帮助。

玩得开心编程!

UPDATE:

我改变users.php,现在JSON没有垃圾..

<?php 

header('Content-Type:application/json'); 

if(!isset($_GET['query'])) 
{ 
echo json_encode([]); 
exit(); 
} 
$mysqli=new PDO("mysql:host=127.0.0.1;dbname=example","root",""); 

$users=$mysqli->query("SELECT id,username FROM Users WHERE username LIKE '%".$_GET['query']."%'"); 


$array = []; 
while($row = $users->fetch(PDO::FETCH_ASSOC)) { 
    $array[] = $row; 
} 

// echo '<pre>'; 
// print_r($array); 
echo json_encode($array); 

?> 
+0

只是改变“哈利戴维森”到“哈雷戴维森”并检查代码...它工作正常与大写但小写 – Dilkush

+0

适用于我的大写或小写的罚款。 –

+0

感谢哥们。仍然不知道混乱是什么。 – Dilkush

1

尝试这样做你的问题为每个字的第一个字符将被清除

改变哈雷戴维森哈雷戴维森。对表中的每个实例重复相同的操作...关于