【问题标题】:How can I use the data I get from my database using MySQLi, in Bootstrap typeahead?如何在 Bootstrap typeahead 中使用我使用 MySQLi 从数据库中获取的数据?
【发布时间】:2012-05-27 17:55:17
【问题描述】:

我正在使用 jQuery ajax + MySQLi 的预处理语句从我的数据库中获取数据。问题是我不知道如何准确格式化要在 Bootstrap 的 typeahead 插件中使用的数据。

这是相关代码:

PHP:

$stmt = $mysqli->prepare("SELECT GAME_NAME FROM GAMES WHERE GAME_NAME LIKE ?");
        $query = "%".$query."%";
        $stmt->bind_param('s',$query);
        $stmt->execute();
        $stmt->store_result();
        $count = $stmt->num_rows;

        if($count > 0) {

          $stmt->bind_result($result);
           while($stmt->fetch()) {

            echo json_encode($result);
          }

我得到的 AJAX 响应是所有名称作为一堆文本:

'"game 1""game 2""blaablaa""some other game"....'

我想我必须有一个名称数组,但我不知道如何将 stmt 结果作为一个数组。我尝试并工作的示例是(我使用数组allCities 作为数据源):

<script type="text/javascript">
        $(document).ready(function() {
            var allCities = ['Baltimore', 'Boston', 'New York', 'Tampa Bay', 'Toronto', 'Chicago', 'Cleveland', 'Detroit', 'Kansas City', 'Minnesota', 'Los Angeles', 'Oakland', 'Seattle', 'Texas'].sort();
            $('#city').typeahead({source: allCities, items:5});
        });
    </script>

现在,如果我只能得到与示例相同格式的结果,我认为我的问题应该得到解决。顺便说一句,我不确定我在代码中使用的json_encode()。这只是我尝试过的。我很感激任何帮助。谢谢。

更新,Ajax:

function handleSearch() {

    var query = $.trim($('#search-field').val());
    var itm = getSearchItem();

    $.ajax({

        type: "POST",
        url: "..//functions/handleSearch.php",
        dataType: "json",
        data: "query="+query+"&itm="+itm,
        success: function(resp) {

            console.log("Server said (response):\n '" + resp + "'");

            $('#search-field').typeahead({source: resp});


        },

        error: function(e) {
            console.log("Server said (error):\n '" + e + "'");
        }
    });

另一个更新:

在“网络”选项卡中,响应给出了我想要的结果,但格式为:Resistance: Fall of ManResident Evil 4John Woo Presents StrangleholdAge of Empires II: The Age of KingsResident Evil 2。所以没有任何格式。 Console.log(resp) 虽然什么也没给我。虽然当我搜索“生化危机 6”时,这意味着当我输入 EXACT NAME 时,console.log 也可以。

【问题讨论】:

    标签: php javascript mysql mysqli twitter-bootstrap


    【解决方案1】:

    基本上你应该创建 key=>value 存储数组,最后你应该用 json_encode 输出它。您在代码中做错的事情是您试图在最后应该完成的每个结果上回显和 json_encode。

    【讨论】:

      【解决方案2】:

      发布初始化 ajax 请求的代码。

      例如这是 jquery ajax 函数的简写

      $.ajax({
          url: url,
          dataType: 'json',
          data: data,
          success: callback
      });
      

      如果数据类型指定为 json,那么回调函数将在您的示例中接收类似 allCities 的数组,然后您可以将其传递给您的插件。例如伪代码:

      $.ajax({
        url: 'http://blabla',
        dataType: 'json',
        data: dataArray,
        success: function(response) {
          $('#city').typeahead({source: response, items:response.count()});
        }
      });
      

      【讨论】:

      • 我刚刚用 dataType: 'json' 修改了代码,我得到服务器说(错误):'[object Object]'。当然,这条消息不是很有帮助。
      • 当服务器响应不是 json 格式时可能会发生此错误。你能发布一些关于请求的信息吗?原始格式的标头和响应
      • 约翰,你能看到我对我的问题的最新更新吗?谢谢。
      • 看起来服务器返回的 json 不正确。我想您可以尝试调试服务器返回的内容。在您的情况下,脚本应该返回数组 ONCE。您需要使用游戏的值创建数组。该字符串应该使用一次,并且 $result 应该是具有所需值的结果数组。回声 json_encode($result);我猜服务器代码是错误的。我没有看到回显 $result 的意义,因为结果导致 while 循环保持不变,没有改变。出了点问题
      • 可能应该是这样的while($row = $stmt-&gt;fetch()) { $result[] = $row } echo json_encode($result);
      猜你喜欢
      • 1970-01-01
      • 2013-06-17
      • 2020-10-06
      • 1970-01-01
      • 2023-01-02
      • 2011-03-27
      • 2011-11-06
      • 2020-06-14
      相关资源
      最近更新 更多