我正在尝试将2D数组传递给Jquery自动完成输入。
这是我的标签看起来像:(照片得到了萤火虫)
我用来创建数组的代码块:
public function autocompleteAction()
{
$this->_helper->layout()->disableLayout();
$this->getHelper('viewRenderer')->setNoRender();
if (isset($_GET['term'])) {
$q = htmlentities($_GET['term']);
try {
$bdd = new PDO('mysql:host=' . $config->app->url . ';dbname=' . $config->resources->db->dbname, 'root', '');
$bdd->exec('SET CHARACTER SET utf8');
} catch (Exception $e) {
exit('Impossible de se connecter à la base de données.');
}
$requete = "SELECT p.nom,p.winjob_com,p.id_projet,c.titre FROM portail_projet p INNER JOIN portail_client c on c.id_client = p.id_client WHERE p.nom LIKE '%" . $q . "%' OR c.titre LIKE '%" . $q . "%' OR p.winjob_com LIKE '%" . $q . "%' AND p.status = 0";
$resultat = $bdd->query($requete) or die(print_r($bdd->errorInfo()));
$array = array(
);
$i = 0;
while ($donnee = $resultat->fetch()) { // on effectue une boucle pour obtenir les données
$array[$i][0] = $donnee['winjob_com'] . " - " . $donnee['titre'] . " : " . $donnee['nom'] . "\n";
$array[$i][1] = $donnee['id_projet'];
$i++;
}
echo json_encode($array); // il n'y a plus qu'à convertir en JSON
}
}
现在JS部分:
$("#autoCompleteProjets").autocomplete({
source: "/index/autocomplete",
minLength: 1,
select: function( event, ui ) {
console.log(
"Selected: " + ui.item.value + " aka " + ui.item.label
);
}
});
提前感谢您的帮助。
答案 0 :(得分:1)
好的,我查看了jQuery自动完成方法的documentation,我想我发现了问题。返回的JSON必须采用特定格式(在查看该页面上示例的xhr响应后):
[{
id: "id_of_this_item",
label: "label of option",
value: "value for the field"
}, ... ]
将PHP更新为此以使格式正确的响应:
public function autocompleteAction() {
// ...
if (isset($_GET['term'])) {
// ...
$options = array();
while ($donnee = $resultat->fetch()) { // on effectue une boucle pour obtenir les données
$temp = array('id' => $donnee['id_projet'],
'label' => $donnee['winjob_com'] . " - " . $donnee['titre'] . " : " . $donnee['nom'], // <-- this the label??
'value' => $donnee['id_projet']);
// add option to options array
$options[] = $temp;
}
die(json_encode($options)); // return JSON
}
}
认为这会奏效,祝你好运。
PS:我会删除行minLength: 1,
以减少对服务器的请求。