php - 基于类别动态自动完成

原文 标签 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>

这是我的 Controller
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 作为另一种选择,但我仍然没有足够的使用经验。

抱歉英语不好,
感谢您的帮助

最佳答案

这仅基于文档,因为我没有可以尝试的任何系统。

你告诉 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>

使用这样的 Controller :
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 ,因此您可以在浏览器的控制台中检查它的值。

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

关于php - 基于类别动态自动完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27959034/

相关文章:

php - 如何在基于 MySQL 的 session 中使用 PHP 中的多维数组?

javascript - 动态更改jQuery选择器内的样式

javascript - jQuery窗口调整大小不起作用

php - 动态下拉选择使用 ajax 填充来自 db 的文本字段

javascript - 根据提交结果隐藏表单打开的文本显示文本

javascript - 从 Twig 到 Js 的数据不完整数组

php - 我创建的PHP命令行界面中未执行SQL查询

php - Drupal 8 将数据库从开发更新/同步到生产

jquery - 剑道用户界面 - 错误 : Uncaught SyntaxError: Unexpected token :

javascript - 使用 AJAX 调用恢复 session