【问题标题】:jQuery UI Autocomplete not working with codeigniterjQuery UI 自动完成功能不适用于 codeigniter
【发布时间】:2011-10-16 23:31:46
【问题描述】:

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

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

$(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%.

谁能看出我哪里出了问题?

【问题讨论】:

  • 在 Firebug 或您使用的任何开发人员工具中,从服务器返回的 JSON 响应是什么样的?
  • 乍一看,您似乎还不错。我想您需要添加一些调试语句并使用 Firebug 之类的东西查看请求。
  • 代码似乎达到了模型 getAutocomplete 并在那里失败 - 我得到的错误消息是“调用非对象上的成员函数”我不明白问题是什么因为 $term 变量被很好地传递了?

标签: php sql jquery-ui codeigniter autocomplete


【解决方案1】:

这适用于启用 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>

【讨论】:

    【解决方案2】:

    由于启用了 CSRF 保护,您可能会收到 500 Internal Server Error。如果是这样,每个POST 请求都必须包含一个 CSRF 值。您有几个选择:

    1. 使用$this-&gt;input-&gt;cookie('your_csrf_name');在您的数据中包含 CSRF 值

    2. 执行GET 请求而不是POST

    在您的控制器中使用$this-&gt;input-&gt;get('term', TRUE);。记住要清理和验证值。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-27
      相关资源
      最近更新 更多