简体   繁体   English

Bootstrap Typeahead:以json的形式从数据库获取数据

[英]Bootstrap Typeahead: getting data from database as json

I'm having issues with getting bootstrap typeahead to return data as a json array from my MySQL database. 我遇到了引导程序提前输入以从MySQL数据库以json数组形式返回数据的问题。

Here's what I have so far: 这是我到目前为止的内容:

$('.typeahead').typeahead({
    items: 5,
    source: function (query, process) {
        $.ajax({
            url: 'typeahead.php',
            type: 'POST',
            dataType: 'JSON',
            data: 'query=' + query,
            success: function(data) {
                process(data);
            }
        });
    },
    highlighter: function(data) {
        // decode JSON data and return it here
    },
    updater: function(data) {
        console.log("CLICKED!");
    },
});

And here's the PHP file: 这是PHP文件:

$search_for = $_POST['query'];
$return = array();

$stmt = $cxn->prepare('SELECT username, display_name FROM users WHERE username LIKE concat("%", ?, "%") OR display_name LIKE concat("%", ?, "%")');
$stmt->bind_param('ss', $search_for, $search_for);
$stmt->execute();
$result = $stmt->get_result();

while (($row = $result->fetch_assoc())) {
    array_push($return, array($row['username'], $row['display_name']));
}

$json = json_encode($return);
echo $json;

And here's the JSON it returns: 这是它返回的JSON:

[["username","Display Name"],["username2","Display Name 2"]]

However, this code doesn't work when I test out the typeahead. 但是,当我测试提前输入时,此代码不起作用。 It gives the following error in console: 它在控制台中给出以下错误:

http://i.imgur.com/xT8CV2b.png

So, my question is, how do you properly get multiple pieces of data from a database and put it into a json array? 因此,我的问题是,如何正确地从数据库中获取多个数据并将其放入json数组中?

instead: 代替:

while (($row = $result->fetch_assoc())) {
    array_push($return, array($row['username'], $row['display_name']));
}

use: 采用:

while (($row = $result->fetch_assoc())) {
    if (isset($row)) $return[] = $row;
}

JavaScript file : JavaScript文件:

function maketypeahead() {
    $(document).ready(function() {
       $('input.typeahead').typeahead({
         items: 5,
         source: function (query, process) {
            $.ajax({
              url: 'typeahead.php',
              type: 'POST',
              dataType: 'JSON',
              data: 'query=' + query,
              success: function(data) {
                console.log(data);
                process(data);
              }
            });
          },
          highlighter: function(item) {
         // Split JSON Array into multiple pieces of data from a database
              var parts = item.split('#'),
              html2 = '<div class="typeahead">';
              html2 += '<div class="media">'
              html2 += '<div class="media-body">';
              html2 += '<span>'+parts[0]+'</span>'+'<br><span style="font-size:7pt" >('+parts[1]+')</span>'+'</p>';
              html2 += '</div>';
              html2 += '</div>';
              return html2;
            },
        updater: function (item) {
            var parts = item.split('#');
            return parts[1];
        },
        });
      });
}

// Run typeahead function
maketypeahead();

Php File (typeahead.php) : php文件(typeahead.php):

<?php
// First you need to connect to your database
$hostname_connection = "localhost";
$database_connection = "cms_db";
$username_connection = "root";
$password_connection = "root";
$connection = mysql_connect($hostname_connection, $username_connection, $password_connection) or trigger_error(mysql_error(),E_USER_ERROR); 
mysql_select_db($database_connection, $connection);

// Select multiple pieces of data from a database
$query = "SELECT username, display_name FROM `users` ";
  if(isset($_POST['query'])){
    $query .= ' WHERE username LIKE "%'.$_POST['query'].'%"' ;
  }
$rs = mysql_query($query) or die(mysql_error());

// And put it into a json array
$return = array();  
while ($rs_db['query'] = mysql_fetch_assoc($rs)){
//
$return[] = $rs_db['query']['username'].'#'.$rs_db['query']['display_name'];    
};
$json = json_encode($return);
print_r($json);
?>

CSS FILE CSS文件

@charset "utf-8";
/* CSS Document */

.typeahead.dropdown-menu {
    color: #000;
    background-color: #FFFFFF;
    padding: 0;
    margin: 10px;
}
.typeahead a {
    color: #000;
    background-color: #FFFFFF;
    padding: 0;
    margin: 10px;
    vertical-align: middle;
}
.typeahead {
    padding: 0px 5px;
    min-width: 250px;
}
.typeahead.dropdown-menu {
    z-index: 200000;
}
.modal-body {
    overflow-y: inherit;
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM