基于类别动态自动完成

时间:2015-01-15 08:08:16

标签: php jquery ajax codeigniter autocomplete

当我尝试使用codeigniter创建基于组合框的动态值的自动完成时,我遇到了问题, 我尝试过使用ajax而没有成功。

这是我在类别

中调用项目的ajax代码
<script type="text/javascript">
$(document).ready(function() {  
    $("#jenis").change(function(){              
        $.ajax({
            type : "POST",
            url: "<?php echo base_url(); ?>whz/admin/get_item",
            dataType: "html",
            data : "item=" + $("#jenis").val(),
            success: function(data)
            { 
                $("#showitem").text(data);  
            }
        });
    });
});
</script>

这是我的自动完成jquery代码

<div id="showitem">
    <script>
     $(function() {
        var availableTags = [
        <?php foreach ($item as $row){
                echo '"'.$row->item_name.'",';}?>
        ];
        $( "#autotags" ).autocomplete({
        source: availableTags
        });
     });
    </script>
</div>

这是我的控制器

public function get_item()
    {
        $this->load->model('whz_model');
        $category = $this->input->post('item');
        $item=$this->whz_model->get_item_by_cat($category);
        $script = '
          $(function() {
            var availableTags = [';
            foreach ($item as $row)
            {
                $script .= '"'.$row->item_name.'",';
            }

        $script .= '];
            $( "#autotags" ).autocomplete({
              source: availableTags
            });
          });';

        echo $script;
    }

我正在考虑使用json作为另一种选择,但我仍然没有足够的使用经验。

抱歉英语不好, 谢谢你的帮助

2 个答案:

答案 0 :(得分:0)

这只是基于文档,因为我没有任何系统方便我可以尝试。

你告诉jQuery你的AJAX响应是"html",这意味着你加载的JavaScript永远不会被执行,我相信。可能,如果您将数据加载为"script",它将起作用,但更好的方法是使用JSON。

您的AJAX调用将如下所示:

<script type="text/javascript">
$(document).ready(function() {  
    $("#jenis").change(function(){              
        $.ajax({
            type : "POST",
            url: "<?php echo base_url(); ?>whz/admin/get_item",
            dataType: "json",
            data : "item=" + $("#jenis").val(),
            success: function(data)
            { 
                availableTags = data;
            }
        });
    });
});
</script>

使用这样的控制器:

public function get_item()
{
    $this->load->model('whz_model');
    $category = $this->input->post('item');
    $item=$this->whz_model->get_item_by_cat($category);

    $this->output
        ->set_content_type('application/json')
        ->set_output(json_encode($item)));
}

您必须全局公开变量availableTags,才能通过将DOM更改为

来实现
<div id="showitem">
    <script>
     $(function() {
        availableTags = [
        <?php foreach ($item as $row){
                echo '"'.$row->item_name.'",';}?>
        ];
        $( "#autotags" ).autocomplete({
        source: availableTags
        });
     });
    </script>
</div>

您可能还希望将其公开为window.availableTags,以便在浏览器的控制台中查看它的价值。

如开头所述,我没有对此进行测试,但我相信它应该可行。

答案 1 :(得分:0)

我已经用我在互联网上找到的另一种方法修复它,它可能不是最好的,但它适用于我, 这是链接

http://www.danielrosca.ro/blog/en/codeigniter-autocomplete/

谢谢你的所有答案