私は検索バーを機能させるのにいくつかの問題を克服するためにTwitterの先読みを使用しています。検索バーのTwitterの先読みを使用して検索バーの仕事をする
目的は:
検索バーは、サイトに登録しているユーザーのユーザー名を検索するために使用されます。
アプローチ:(home.php
に含まれる)
<script src="typeahead.min.js"></script>
header.php
:
<input type="text" class="form-control" placeholder="Search user" name="typeahead">
<script>
$(document).ready(function(){
$('input.typeahead').typeahead({
name: 'typeahead',
remote:'search.php?key=%QUERY',
limit : 10
});
});
</script>
search.php
:
head
home.php
ので
<?php
include("connect.php");
$key=$_GET['key'];
$array = array();
$query = mysqli_query("SELECT * FROM users WHERE username LIKE '%{$key}%'");
while($row=mysqli_fetch_assoc($query)){
$array[] = $row['username'];
}
echo json_encode($array);
?>
現在の結果:
、home.php
に私が実際のユーザーであるユーザーAlice
、を検索してみてください上記のコードを持つ場合には(私は途中での検索をクリックすることではないのです、私は単純にしています検索バーに彼女の名前を入力する。アリスが本当のユーザーであれば、彼女の名前がドロップダウンに表示されます)。しかし、私が彼女を検索すると、URLが変わります。
要約: アリスと入力すると(何もしません)、何も起こりません。私はAliceが実際のユーザー名であるためにドロップダウンが表示されることを期待しています。
私はアリスを入力し、検索ボタンをクリックしない場合、にURLの変更:私はそれが動作することを期待どのよう
http://localhost/home.php?typeahead=Alice
編集:
私が試した別のアプローチheader.php
:
<input type="text" class="form-control" placeholder="Search user" name="typeahead">
<?php
// getting all usernames from db
$statement = mysqli_prepare ($connect, "SELECT * FROM users WHERE account_type ='user'");
mysqli_stmt_execute($statement);
$usernames = array();
$result = mysqli_stmt_get_result($statement);
while($get_data = mysqli_fetch_assoc ($result)){
$usernames[] = $get_data['username'];
}
mysqli_stmt_close($statement);
?>
<script>
var substringMatcher = function(strs) {
return function findMatches(q, cb) {
var matches, substringRegex;
// an array that will be populated with substring matches
matches = [];
// regex used to determine if a string contains the substring `q`
substrRegex = new RegExp(q, 'i');
$.each(strs, function(i, str) {
if (substrRegex.test(str)) {
matches.push(str);
}
});
cb(matches);
};
};
var username = <?php echo json_encode($usernames); ?>;
$('#the-basics .typeahead').typeahead({
hint: true,
highlight: true,
minLength: 1
},
{
name: 'usernames',
source: substringMatcher(username)
});
</script>
Githubから以下のアプローチが採用されています。
このアプローチでは、まだ一致する名前を表示するドロップダウンリストは表示されません。
こんにちは、お返事ありがとうございます。私はあなたのアプローチを実装しようとしている、と私はまだ同じ結果を得る。しかし、私は正しいファイルにコードを配置していないと思います。 'bloodhound'オブジェクトはどこで作成しますか?私は現在、 'bloodhound'オブジェクト、' remote'と 'header.php'の宣言を作成しました。これは検索バーが作成されるところです。また、私の編集を参照してください。私はあなたから提供された例を使って別のアプローチを試みました。 – Freddy
この例のコードはすべてdocument.readyによって異なります。 'header.php'の'