【问题标题】:Bootstrap Typeahead: getting data from database as jsonBootstrap Typeahead:从数据库中获取数据作为 json
【发布时间】:2014-04-25 01:34:01
【问题描述】:

我在获取引导输入以从我的 MySQL 数据库中以 json 数组形式返回数据时遇到问题。

这是我目前所拥有的:

$('.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!");
    },
});

这是 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;

这是它返回的 JSON:

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

但是,当我测试预输入时,此代码不起作用。它在控制台中给出以下错误:

那么,我的问题是,如何正确地从数据库中获取多条数据并将其放入 json 数组中?

【问题讨论】:

  • 您正在使用您的数据创建一个数组。尝试在变量中获取原始结果,然后对其调用 json_encode() 而不经过循环

标签: javascript php jquery twitter-bootstrap bootstrap-typeahead


【解决方案1】:

改为:

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

使用:

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

【讨论】:

    【解决方案2】:

    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 文件(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 文件

    @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;
    }
    

    【讨论】:

    • 提供某种解释,不要只是粘贴代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-02
    • 1970-01-01
    • 2020-04-13
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    相关资源
    最近更新 更多