Codeigniter与数据库中的数据级联下拉列表


Codeigniter cascading dropdown with data from database

我需要帮助制作一个包含数据库数据的级联下拉列表

我找到了一个关于这个的教程和我试过这个

控制器:

function ajax_call() {
    if(!empty($_POST['table'])){
        if ($_POST) {
            $table = $_POST['table'];
            $arrYear = $this->my_model->get_categories($table);
            foreach ($arrYear as $years) {
                $arrFinal[$years->category2 = $years->category2;
            }
            echo "<p>2nd Category:<br>";
            echo form_dropdown('year',$arrFinal);
            echo "</p><br>";
        }
        else
        {
            echo "<p>2nd Category:<br>";
            echo form_dropdown('year','');
            echo "</p><br>";
        }
    }
}

我的观点:

$options = array(
      '' => 'Select',
      'category_one' => 'Category 1',
      'category_two' => 'Category 2',
     );

    echo form_error('table');
    echo "<p>Category:<br> ";
    echo form_dropdown('table', $options, $this->input->post('table'), 'id="table"');
    echo "</p><br>";

我的视图中的脚本:

<script type="text/javascript">
     $(document).ready(function(){
      $('#table').change(function(){
       var selTable = $(this).val(); // selected name from dropdown #table
       $.ajax({
        url: "ajax_call",  // or "resources/ajax_call" - url to fetch the next dropdown
        async: false,
        type: "POST",     // post
        data: "table="+selTable,  // variable send
        dataType: "html",    // return type
        success: function(data) {  // callback function
         $('#year').html(data);
        }
       })
      });
     });
    </script>

我的型号:

function get_categories($table) {
         $this->db->select('category2')->from($table);
         $query = $this->db->get();
         return $query->result();
        }

我唯一的问题是,当加载时,第二个下拉列表在页面上不可见,只有当我在第一个下拉列表上选择时,它才会出现。

如何在不选择第一个下拉菜单的情况下将其设置为显示在页面上?有人能帮忙吗?

好吧,我不知道该怎么做。因此,我在互联网的深处搜索,发现了这个小教程,这正是我所需要的。

http://supundharmarathne.wordpress.com/2013/03/13/simple-ajax-drop-down-filtering-with-codeigniter/

之所以会发生这种情况,是因为只有在表更改$('#table').change(function(){...})之后才会触发填充表的ajax调用。尝试在不等待此类更改的情况下填充表;可能在$(document).ready(function(){...}) 内部

您在代码中添加了一个完全过时的if ($_POST)。您已经在检查$_POST中是否存在一个变量,因此在此之后它永远不能为空。这导致ELSE语句与第二个IF相关,而不是第一个IF。

function ajax_call() {
    if(!empty($_POST['table'])){
        $table = $_POST['table'];
        $arrYear = $this->my_model->get_categories($table);
        foreach ($arrYear as $years) {
            $arrFinal[$years->category2 = $years->category2;
        }
        echo "<p>2nd Category:<br>";
        echo form_dropdown('year',$arrFinal);
        echo "</p><br>";
    }
    else
    {
        echo "<p>2nd Category:<br>";
        echo form_dropdown('year','');
        echo "</p><br>";
    }
}

这就是为什么您应该始终正确缩进代码的原因。