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

时间:2014-09-22 04:51:15

标签: php jquery codeigniter

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

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

控制器:

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();
        }

我唯一的问题是第二个下拉列表在加载时在页面上不可见,并且仅在我在第一个下拉列表中选择时才会显示。

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

3 个答案:

答案 0 :(得分:1)

好的,我无法弄清楚如何做我想做的事。因此,我搜索了互联网的深层部分,发现了这个实际上我需要的小教程。

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

答案 1 :(得分:0)

这种情况正在发生,因为只有在表更改$('#table').change(function(){...})后才会触发填充表的ajax调用。尝试填充表格而不等待这样的改变;也许在$(document).ready(function(){...})

里面

答案 2 :(得分:-1)

您在代码中添加了一个完全过时的if ($_POST)。您已经在检查$ _POST中的变量是否存在,因此在此之后它永远不会为空。这导致您的ELSE语句与第二个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>";
    }
}

这就是始终正确缩进代码的原因。