2

你好 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

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/

4

2 回答 2

3

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

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

于 2012-07-22T14:43:39.933 回答
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');
于 2012-07-22T14:52:56.150 回答