mysql数据到javascript对象


mysql data to javascript object

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,蔬菜,en

食品含有:

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

食品中的类别与foodstuffcategories中的category_id相同。

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

问题:我需要从数据库数据中创建一个对象,该对象符合jQueryUI的自动建议小部件,它看起来像这样:

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

我目前正在调用php脚本:

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

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

给出答案后附加的信息

在已接受的答案中使用可变答案。

从数据库中自动完成jquery ui需要的信息比显而易见的要多!请参阅本页:http://www.simonbattersby.com/blog/jquery-ui-autocomplete-with-a-remote-database-and-php/

创建一个类似于JSON中所需结构的数组,然后json_encode()该数组。

如果查询只返回数组中所需的内容,只需提取所有行并将其存储在一个数组中,然后json_encode()即可。

未测试:

...
$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');