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、categoryおよびlanguage。
  • 例:1、1、野菜、en

食品に含まれるもの:

  • ID、カテゴリ、名前、言語
  • 例:1、1、ジャガイモ、en

食品のカテゴリは、foodstuff_categoriesのcategory_idと同じです。

foodstuff_categoriesにはカテゴリの名前が含まれ、foodstuffには食品の名前が含まれます。

問題: 次のような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ウィジェットに準拠したオブジェクトに変換するスマートな方法を見つける必要があると思います。

回答が与えられた後に追加された情報

受け入れられた回答で代替回答を使用します。

データベースからのjqueryuiオートコンプリートには、すぐにわかるよりも多くの情報が必要です。このページを参照してください: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 に答える