前提・実現したいこと
お世話になります。
MySQLからデータを取得し、その内の1列を取り出して配列に格納後、
JQuery UIのautocompleteメソッドを使用したオートコンプリート機能で表示させたいと考えております。
今回の場合は、name_jaの全項目をテキスト入力欄の候補として表示したいです。
しかし、一通りコードを組んでみても、候補が1つも表示されません。
該当のソースコード
以下PHPはautocomplete-datasource.php内の記述となります。
PHP
1<?php 2$mysqli = new mysqli($sql_hostname, $sql_username, $sql_password, $sql_userdb_name); 3if( $mysqli->connect_errno ) { 4 echo $mysqli->connect_errno . ' : ' . $mysqli->connect_error; 5} 6$query = "SELECT `name_ja` FROM `class`"; 7$mysqli->set_charset('utf8'); 8$result = $mysqli->query($query); 9while($ls = $result->fetch_array(MYSQLI_ASSOC)) { 10 $list[] = $ls; 11} 12$mysqli->close(); 13 14$b = array(); 15 16if(isset($_POST['param1'])){ 17 $w = $_POST['param1']; 18 foreach($list as $i){ 19 if(stripos($i, $w) !== FALSE){ 20 $b[] = $i; 21 } 22 } 23 echo json_encode($b); 24} 25else{ 26 echo json_encode($b); 27}
HTML
1<script src="https://code.jquery.com/jquery-3.0.0.min.js"></script> 2<script src="https://code.jquery.com/ui/1.12.0/jquery-ui.js"></script> 3<script type="text/javascript"> 4 $(document).ready( function() { 5 $("#ac2").autocomplete({ 6 source: function(req, resp){ 7 $.ajax({ 8 url: "./autocomplete-datasource.php", 9 type: "POST", 10 cache: false, 11 dataType: "json", 12 data: { 13 param1: req.term 14 }, 15 success: function(o){ 16 resp(o); 17 }, 18 error: function(xhr, ts, err){ 19 resp(['']); 20 } 21 }); 22 23 } 24 }); 25 }); 26 </script> 27 28(中略) 29 30<input type="text" id="ac2" name="class" class="form-control">
試したこと
var_dump($list);を実行してみたところ、以下のように表示されました。
array(3) { [0]=> array(1) { ["name_ja"]=> string(11) "授業名01" } [1]=> array(1) { ["name_ja"]=> string(11) "授業名02" } [2]=> array(1) { ["name_ja"]=> string(11) "授業名03" } }
$listをMySQLから取得したものではなく、array("01","02","03");などに変更すると、オートコンプリートが正常に動作するため、配列の問題であることまではわかりました。しかし、どこが問題なのかがわかりません…。
上記の01,02,03の場合のvar_dump($list);の出力結果は以下になります。
[]array(3) { [0]=> string(2) "01" [1]=> string(2) "02" [2]=> string(2) "03" }
補足情報(FW/ツールのバージョンなど)
PHP Version 7.2.7
初歩的な質問で恐縮ですが、何卒よろしくお願いいたします。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/09/25 05:01
2018/09/25 05:03
2018/09/25 05:28
2018/09/25 05:43
2018/09/25 05:56 編集
2018/09/25 06:06
2018/09/25 06:17
2018/09/25 06:40