尝试将2维数组传递给JQuery自动完成

时间:2013-06-07 09:58:19

标签: php jquery json autocomplete

我正在尝试将2D数组传递给Jquery自动完成输入。

这是我的标签看起来像:(照片得到了萤火虫)

http://hpics.li/6221d85

我用来创建数组的代码块:

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

        );
    }
});

提前感谢您的帮助。

1 个答案:

答案 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,以减少对服务器的请求。