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

Posted

技术标签:

【中文标题】用逗号分隔的 jQuery 自动完成文本在 CodeIgniter 中不起作用【英文标题】:jQuery autocomplete text seperated with comma not working in CodeIgniter 【发布时间】:2018-09-27 00:41:55 【问题描述】:

代码: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>

控制器:user.php

public function search()

    $this->load->view('user/search_json');

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

谢谢!

【问题讨论】:

调试器控制台是否出现错误? 没有错误显示@MathieuDormeval 你的user/search_json 被叫到了吗? 不,@MathieuDormeval 什么也没发生。但是,如果我创建一个单独的文件,那么它的工作 您可能需要设置标题。 CodeIgniter 将 JSON 服务为 text/html 【参考方案1】:

首先,&lt;?php echo base_url(); ?&gt;user/search 可以而且应该像&lt;?php echo base_url('user/search'); ?&gt; 一样使用。 (虽然我主要是 &lt;?= base_url().'user/search'; ?&gt; :) 有趣的是,我不是唯一一个使用它“错误”的人......

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

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

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

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

【讨论】:

以上是关于用逗号分隔的 jQuery 自动完成文本在 CodeIgniter 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

jQuery - 自动完成 - 击键错误

我初学matlab,现在需要完成用MATLAB读取TXT文本数据存于结构体,文本数据以逗号作为分隔。

Excel UDF - 对单元格内用逗号分隔的数字和文本进行排序

SQlite 大数用逗号分隔

用 jQuery 逗号分隔的错误列表

在 Jquery Validation 中最多允许 10 封电子邮件,每个逗号分隔