对codeigniter控制器进行预先远程调用

时间:2015-06-12 05:07:17

标签: ajax codeigniter typeahead.js

我希望能够使用typeahead使用codeigniter从bloodhound进行远程数据调用。

1 个答案:

答案 0 :(得分:2)

所以我努力让typeahead(twitter)远程数据和codeigniter一起工作,我努力找到一个符合我需求的好例子。几个小时后,我想出了以下代码,希望它有所帮助。

视图:

var proyectos = new Bloodhound({
  datumTokenizer: function(d) { return Bloodhound.tokenizers.whitespace(d.proyecto_titulo); },
  queryTokenizer: Bloodhound.tokenizers.whitespace,
  remote: {
    url: 'proyectos/proyectos/getProyectos?query=%QUERY',
    wildcard: '%QUERY'
  } 
});

$('#titulo').typeahead({
    hint: true,
    highlight: true,
    minLength: 3
 },
  {
  name: 'proyectos',
  displayKey: 'proyecto_titulo',
  source: proyectos.ttAdapter(),
  templates: {
    empty: [
      '<div class="empty-message">',
        'No se encontraron registros que coincidan con la búsqueda.',
      '</div>'
    ].join('\n'),
    suggestion: Handlebars.compile('<p>{{proyecto_titulo}} – <strong>{{tipo_proyecto_nombre}}</strong> </p>')
  }
});

这里的相关部分是:

remote:{         url:&#39; proyectos / proyectos / getProyectos?query =%QUERY&#39;,         通配符:&#39;%QUERY&#39;       }

proyectos / proyectos 是控制器路径, getProyectos 是回答请求的方法。

每当您键入并基于 minLength 设置时,都会在后端请求匹配的字符串。

注意:要在模板设置中使用建议部分,您必须下载 handlebars.js 库。

控制器:

public function getProyectos() {
        $consulta = $this->input->get('query');
        $proyectos = $this->proyectos_model->getProyectos($consulta);
        if($proyectos->num_rows() > 0){
            echo json_encode($proyectos->result());
        }
        else{
            echo '';
        }
    }

我们首先从视图中获取 $ this-&gt; input-&gt; get(&#39; query&#39;)的查询字符串,然后将其传递给我们的模型。

型号:

public function getProyectos($consulta) {
         $query = $this->db->query
        ("select pro.proyecto_id
                ,pro.proyecto_titulo
                ,tip.tipo_proyecto_nombre
                ,tip.tipo_proyecto_id
                from proyectos pro 
                inner join tipos_proyectos tip on tip.tipo_proyecto_id = pro.tipo_proyecto_id 
                where pro.proyecto_titulo ilike '%" . $consulta . "%' ");
        return $query;
     }

在模型中,我们只是将查询字符串传递给我们的sql select语句,我们就完成了。我使用的数据库是postgresql。

我希望你觉得这很有用。