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