用逗号分隔的jQuery自动完成文本在CodeIgniter中不起作用

时间:2018-04-17 06:42:24

标签: php jquery codeigniter autocomplete

代码: search_json.php

<?php
    function get_data()
    {
        $ci =& get_instance();

        $ci->db->select('*');
        $ci->db->from('top_menu');
        $ci->db->order_by('menu_name');
        $query = $ci->db->get();
        $result = $query->result_array();
        foreach($result as $row)
        {
            $menu[] = array(
                                'id' => $row["id"],
                                'label' => $row["menu_name"]
                            );
        }
        return json_encode($menu);
    }
    echo "<pre>";
    print_r(get_data());
    echo "</pre>";
?>

的index.php

<script>
    $(function(){
        function split( val ) 
        {
            return val.split( /,\s*/ );
        }
        function extractLast( term ) 
        {
            return split( term ).pop();
        }
        $( "#tags" )
        .on( "keydown", function( event ) {
            if ( event.keyCode === $.ui.keyCode.TAB &&
            $( this ).autocomplete( "instance" ).menu.active ) {
                event.preventDefault();
            }
        })
        .autocomplete({
            source: function( request, response ) {
                $.getJSON( "<?php echo base_url(); ?>user/search", {
                    term: extractLast( request.term )
                }, response );
            },
            search: function() {
                var term = extractLast( this.value );
                if ( term.length < 1 ) {
                    return false;
                }
            },
            focus: function() {
                return false;
            },
            select: function( event, ui ) {
                var terms = split( this.value );
                terms.pop();
                terms.push( ui.item.value );
                terms.push( "" );
                this.value = terms.join( ", " );
                return false;
            }
        });
    });
</script>
<script src="https://code.jquery.com/jquery-1.12.4.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
<div class="ui-widget">
    <label for="tags">Tags</label>
    <input type="text" class="form-control1" id="tags" name="tags"/>
</div>

controller: user.php

public function search()
{
    $this->load->view('user/search_json');
}

在这段代码中,我创建了一个json格式文件(即search_json.php),我想在index.php中实现它。 search_json.php文件工作正常,数据格式正确,但是当我在标签输入字段内写入内容时,它什么也没有显示。那么,我该如何解决这个问题?

谢谢!

1 个答案:

答案 0 :(得分:0)

首先,<?php echo base_url(); ?>user/search可以,并且应该像<?php echo base_url('user/search'); ?>一样使用。 (我主要做<?= base_url().'user/search'; ?>虽然:)很有趣,看到我不是唯一一个使用'错误'的人......

如果我有ajax控制器,我倾向于设置输出:

$this
    ->output
    ->set_content_type('application/json')
    ->set_output(json_encode($return)); // Where $return is an array

所以在你的情况下,我猜你应该将json php文件加载为partial,并将输出设置为部分内容:

public function search() {
    $return = $this->load->view('user/search_json', '', true);
    $this
        ->output
        ->set_content_type('application/json')
        ->set_output($return);
}