首页 > 解决方案 > 如何在不刷新页面的情况下根据选择框值从codeigniter中的数据库获取值?

问题描述

无法从 codeigniter 中的数据库获取值。我尝试在不使用 ajax 刷新页面的情况下根据选择框值(menu_code)获取数据,但结果未定义。

这是我的控制器的代码:login.php

public function get_menu_rights()
{
    if (isset($_POST['name']))
    {       
        $root_id = $this->input->post('menu_root_id');

        $data['res'] = $this->login_model->get_menu_check($root_id);
        // print_r($data['res']);
        echo json_encode($data);
        //$this->load->view('pages/role_rights',$data);     
    }
}

下面是我的模型代码login_model.php

public function get_menu_check($root_id)
{       
    $this->db->select('menu_code,menu_name');       
    $this->db->from('create_menu as C1');   
    $this->db->where('C1.menu_root_id',$root_id);       
    $this->db->order_by('menu_code');

    return $this->db->get()->result_array();
}

这是我的视图代码role_rights.php

<form action="<?php echo base_url('login/get_menu_rights');?>" method="post">
    <?php
     print"<select class=\"form-control\" name=\"menu_root_id\" onchange=\"javascript:__doPostBack();\" id=\"menu_root_id\">"; ?>                                       <option value="select">select</option>
                        <?php foreach($result as $res) { ?>                             
                    <option value="<?php echo $res->menu_code; ?>">
                    <?php echo $res->menu_name.'-'.$res->menu_code; ?>
                    </option>
                <?php } ?>
            </select>
            </form>
        </div>
    <script src='https://code.jquery.com/jquery-2.1.3.min.js'></script>

<script type="text/javascript">
        function __doPostBack()
        {
            var name = document.getElementById('menu_root_id').value; 
            var dataString='name='+ name;
            $.ajax({
                type:"post",
                url:"<?php echo base_url('login/get_menu_rights'); ?>",
                data:dataString,
                cache:false,
                dataType: 'json',                  
              success: function(data)        
              {
                var id = data[0];             
                var vname = data[1]; 
                $('#output').html("<b>menu_code: </b>"+id+"<b> menu_name: </b>"+vname); 
              }
            });
            return false;
        }
        </script>
</div>

<div id="output"></div>

标签: phpajaxcodeignitercodeigniter-3

解决方案


我注意到了一些事情

  1. $data是一个未定义的数组,您将模型函数返回的结果数组设置为它的'res'
  2. dataString不是 json 也不是您要发送的 js 数组
  3. 既然你用了json_encode,你需要JSON.parse(data)在ajax成功使用
  4. 如果你确实有结果$data['res'],那么你需要做这样的事情 -data=JSON.parse(data)['res'];现在你可以iddata[0]

推荐阅读