【问题标题】:mysql data to javascript objectmysql 数据到 javascript 对象
【发布时间】:2012-07-21 00:29:13
【问题描述】:

大家好 StackOverflowers!

我在数据库中有一些信息需要取出并放入 javascript 上下文中。

我用mysqlli成功获取数据了:

$mysqli = new mysqli("localhost", "censored", "censored", "censored");

/* check connection */
if (mysqli_connect_errno())
{
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}

$query = "SELECT * FROM foodstuff";

foodstuff_categories 包含:

  • id、category_id、类别和语言。
  • 示例:1、1、蔬菜、英文

食物包含:

  • id、类别、名称和语言
  • 示例:1、1、土豆、英文

foodstuff 中的category 与 foodstuff_categories 中的 category_id 相同。

foodstuff_categories 包含类别名称,而 foodstuff 包含食品名称。

问题: 我需要从符合 jQuery UI 的自动建议小部件的数据库数据中创建一个对象,如下所示:

 var availableTags =
 [
    { label: "veal"  , category: "meat" },
    { label: "potato", category: "vegetables" }
 ];

我目前正在调用 php 脚本:

$.get('php/dbFoods.php', function(data)
{
    //gotta do something with that data! :)
});

我的想法 我想我需要在 select 语句中加入一些信息,然后找到一种聪明的方法将该数据转换为符合 jquery UI 小部件的对象。

给出答案后的附加信息

在接受的答案中使用替代答案。

来自数据库的 jquery ui 自动完成需要比立即显而易见的更多信息!参考这个页面:http://www.simonbattersby.com/blog/jquery-ui-autocomplete-with-a-remote-database-and-php/

【问题讨论】:

  • 喜欢... JSON?只需使用json_encode
  • 是的,问题是让数组处于我可以对其进行 json 编码的状态:)
  • 那么你真的想让 SQL 查询来做吗?
  • 我基本上想要 scessor 发布的内容,但我遇到了语法错误。

标签: php jquery mysqli


【解决方案1】:

在 JSON 中创建一个类似于您想要的结构的数组,然后 json_encode() 该数组。

如果您的查询只返回数组中您想要的内容,只需获取所有行并将它们存储在一个数组中,然后json_encode() 它。

【讨论】:

    【解决方案2】:

    未经测试:

    ...
    $query = "
      SELECT fc.`category` AS category, f.`name` AS label
      FROM `foodstuff` AS f 
      INNER JOIN `foodstuff_categories` AS fc 
      ON fc.`category_id` = f.`category`
    ";
    $res = $mysqli->query($query);
    $rows = array();
    while ($data = $res->fetch_assoc()) {
        $rows[] = $data;
    }
    // convert iso to utf8 data 
    function encodeArray($array) {
        foreach ($array as $index => $row) {
            $array[$index] = array(
                'category' => mb_check_encoding($row['category'], 'UTF-8') ? $row['category'] : utf8_encode($row['category'])
                , 'label' => mb_check_encoding($row['label'], 'UTF-8') ? $row['label'] : utf8_encode($row['label'])
            );
        }
        return $array;
    }
    echo json_encode(encodeArray($rows));
    

    替代方案:

    ...
    $mysqli->query("SET NAMES 'utf8'", $connection); // from now on return data in utf8 format (only)
    $query = "
      SELECT fc.`category` AS category, f.`name` AS label
      FROM `foodstuff` AS f 
      INNER JOIN `foodstuff_categories` AS fc 
      ON fc.`category_id` = f.`category`
    ";
    $res = $mysqli->query($query);
    $rows = array();
    while ($data = $res->fetch_assoc()) {
        $rows[] = $data;
    }
    echo json_encode($rows);
    

    查询用给定的结构构建一个关联数组。 json_encode() 为客户端构建一个 JSON。 jQuery 可以自动将 JSON 转换为可以被 javascript 解析的对象。可能您应该将 dataType 参数(此处为 'json')添加到您的 jQuery get:

    $.get('php/dbFoods.php', function(data)
    {
        //gotta do something with that data! :)
    }, 'json');
    

    【讨论】:

    • 正是我需要的...我还需要评估 javascript 上的 json 数据吗? PHP 给了我这个错误:致命错误:在第 20 行审查的非对象上调用成员函数 fetch_assoc()
    • Ehm 第 20 行是:while ($data = $res->fetch_assoc())
    • 是查询导致的问题吗?现在我得到了很多这些: 警告:json_encode(): Invalid UTF-8 sequence in argument in /customers/6/5/8/gybbel.dk/httpd.www/php/dbFoods.php on line 24 这是回声json_encode($rows);
    • 在单个表上它是 utf8_danish_ci,在一般排序规则上它是 utf8_general_ci。数据库将包含像æøå 这样的丹麦字符,但一般的 utf8 应该能够处理吗?我应该把它换成别的东西吗?编辑:是的,SQL 有效,刚刚测试过! :) 非常感谢您的帮助。
    • 替代脚本有效! :) 但是我得到 æøå 为“\u00f8”。有没有办法在 phpmyadmin 中设置它而不是调用“SET NAMES 'utf8'”?
    猜你喜欢
    • 2014-07-16
    • 1970-01-01
    • 2011-01-13
    • 2017-11-27
    • 1970-01-01
    • 2013-01-03
    • 1970-01-01
    • 2021-02-23
    • 1970-01-01
    相关资源
    最近更新 更多