0

typeahead を使用すると、PDO を使用して結果を取得できないようです。限られた英語でできる限り最善を尽くしましたが、解決策を見つけることができませんでした。PHP で何か間違ったことをしているのかもしれません。内訳は次のとおりです。

typehead.js と bootstrap 3 を使用します。

HTML :

<input type="text" class="seek typeahead" id="seekInput" placeholder="Search" />

JS:

$(document).ready(function() {
     $('.seek.typeahead').typeahead({                               
          name: "seek",                
        remote: 'include/search.php?store=%QUERY'
    });
});

Search.php と、先行入力用の配列を生成しようとしている場所:

require_once ('konnekt.php');

$query = $db->prepare("SELECT store FROM retailers WHERE  store or country LIKE :country");
$country = (isset($_POST['query']) === true) ? $_POST['query'] : '';
$query->bindValue(':country', '%' . $country . '%' );
$query->execute();
foreach ($query->fetchAll(PDO::FETCH_ASSOC) as $row) {
    $array[] = $row;
}
echo json_encode($array);

これが私のブラウザが言っていることです:

ステータス 200

応答:[{"store":"Aplace"},{"store":"Aplace"},{"store":"Design Only"}]

ライブで起こっていること:

未定義

4

1 に答える 1

0

デフォルトのtypeahead.js は<p/>、デフォルトのデータ形式を使用してタグをレンダリングします。これは、文字列の配列と同じくらい単純です。

[
    "Aplace",
    "Aplace",
    "Design Only"
]

これらの文字列は自動的にdatumsに変換されます。これは、データを表示する方法とクエリをデータと照合する方法の両方を定義する形式の先行入力名です。

元の例を使用して、PHP で文字列の配列を出力する方法は次のとおりです。

require_once ('konnekt.php');
$result = array();
$query = $db->prepare("SELECT store FROM retailers WHERE  store or country LIKE :country");
$country = (isset($_POST['query']) === true) ? $_POST['query'] : '';
$query->bindValue(':country', '%' . $country . '%' );
$query->execute();
foreach ($query->fetchAll(PDO::FETCH_ASSOC) as $row) {
    $result[] = $row["store"];
}
echo json_encode($result);

storeデータのキーとして引き続き使用したい場合は、次のことができます。

  • valueKey元の先行入力定義でパラメーターを設定します。

    $('.seek.typeahead').typeahead({                               
        name: "seek",                
        remote: 'include/search.php?store=%QUERY',
        valueKey: 'store'
    });
    

そして、tokensデータムごとに必要なプロパティも返します。

    [
      {
        "store": "Aplace",
        "tokens": ["Aplace"]
      },
      {
        "store": "Aplace",
        "tokens": ["Aplace"]
      },
      {
        "store": "Design Only",
        "tokens": ["Design", "Only"]
      }
    ]

トークンは単一の単語の配列であることに注意してください。これは、クエリを照合するために先行入力で使用される実際の値です。

于 2013-10-29T02:38:41.597 に答える