JQuery UI Автозаполнение не работает с codeigniter - PullRequest
1 голос
/ 31 июля 2011

Я пытаюсь получить поле для моего автозаполнения со значениями из базы данных, но не могу понять, что происходит не так ....

На мой взгляд, у меня есть следующеескрипт:

$(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();
    }

Вышеприведенный запрос эквивалентен «ВЫБРАТЬ вопрос из вопроса, ГДЕ вопрос НРАВИТСЯ% $ term%.

Может кто-нибудь увидеть, где я ошибаюсь? *

Ответы [ 2 ]

0 голосов
/ 02 августа 2011

Работает с включенной 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>
0 голосов
/ 31 июля 2011

Возможно, вы получаете 500 Внутренняя ошибка сервера, вызванная включенной защитой CSRF.Если это так, каждый запрос POST должен содержать значение CSRF.У вас есть несколько вариантов:

1. Включите значение CSRF в ваши данные, используя $this->input->cookie('your_csrf_name');

2. Выполните GET запросвместо POST.

Используйте $this->input->get('term', TRUE); в вашем контроллере.Не забудьте продезинфицировать и проверить ценность.

3. Отключить защиту от CSRF.Не рекомендуется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...