jQuery UI自动完成不使用codeigniter

时间:2011-07-31 16:56:21

标签: php sql jquery-ui codeigniter autocomplete

我正在尝试使用数据库中的值自动完成我的视图中的字段,但似乎无法弄清楚出了什么问题....

在我看来,我有以下脚本:

$(document).ready(function() {
    $(function() {
        $( "#searchQuestion" ).autocomplete({
            source: function(request, response) {
                $.ajax({ url: "<?php echo site_url('contentmanagement/suggestions'); ?>",
                data: { term: $("#searchQuestion").val()},
                dataType: "json",
                type: "POST",
                success: function(data){
                    response(data);
                }
            });
        },
        minLength: 2
        });
    });
});

在我的内容管理控制器中,我有“建议”功能:

function suggestions() {
$this->load->model('onlinehelp');
$term = $this->input->post('term', TRUE);

if (strlen($term) < 2)
    break;

$rows = $this->onlinehelp->GetAutocomplete($term);

$keywords = array();
foreach ($rows as $row)
    array_push($keywords, $row->question);

echo json_encode($keywords);}

最后在我的模型中我有以下功能 -

function GetAutocomplete($term) {
        $this->db->select('question');
        $this->db->like('question',$term, 'both');
        $query = $this->db->get('question');
        return $query->result();
    }

上面的查询相当于“SELECT question FROM question WHERE question LIKE%$ term%。

任何人都可以看到我的错误吗?

2 个答案:

答案 0 :(得分:0)

您可能会因启用CSRF保护而导致500内部服务器错误。如果是这样,则每个POST请求必须包含CSRF值。您有几个选择:

1。使用$this->input->cookie('your_csrf_name');

在您的数据中包含CSRF值

2。执行GET请求而不是POST

在控制器中使用$this->input->get('term', TRUE);。记得清理和验证价值。

3. 禁用CSRF保护。不建议。

答案 1 :(得分:0)

这适用于启用CSRF:

使用jquery cookie插件

<script type='text/javascript' src='<?php echo base_url(); ?>/js/lib/jquery.cookie.js'></script>

然后在你的自动完成事情上:

<script type="text/javascript">
$(document).ready(function() {

$(function() {
    $("#searchQuestion").autocomplete({
        source: function(request, response) {
            $.ajax({ url: "<?php echo site_url('contentmanagement/suggestions'); ?>",
                data: { term: $("#searchQuestion").val(), ci_csrf_token: $.cookie("ci_csrf_token") },
                dataType: "json",
                type: "POST",
                success: function(data){
                    response(data);
                }
            });
        },
        minLength: 2,
        focus: function( event, ui ) {
            $("#searchQuestion").val(ui.item.term);
            return false;
        }
    })
    .data("autocomplete")._renderItem = function( ul, item ) {
            return $( "<li></li>" )
                    .data( "item.autocomplete", item )
                    .append( "<a>" + item.term + "</a>" )
                    .appendTo( ul );
    };
  });
});</script>