如何在不刷新页面的情况下基于选择框值从Codeigniter中的数据库中获取值?

时间:2018-07-19 13:47:25

标签: php ajax codeigniter codeigniter-3

无法从Codeigniter中的数据库获取价值。我尝试根据选择框值(menu_code)来获取数据,而没有使用ajax刷新页面,但是结果未定义。

这是我的控制器代码: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>

3 个答案:

答案 0 :(得分:1)

希望这对您有帮助:

替换

$root_id = $this->input->post('menu_root_id');

使用

$root_id = $this->input->post('name');

您的控制器的get_menu_rights方法应如下所示:

public function get_menu_rights()
{
  $root_id = $this->input->post('name');
  if(! empty($root_id))
  {
    $data = $this->login_model->get_menu_check($root_id);
    // print_r($data);
    echo json_encode($data);
    exit;   
   }
}

您的ajax success函数应如下所示:

success: function(data)        
{
  var html = '';
  $.each(data,function(k,v){
    alert(v);
    html += "<b>menu_code: </b>"+v.menu_code+"<b> menu_name: </b>"+v.menu_name
  });
  $('#output').html(html); 
}

答案 1 :(得分:1)

我注意到了几件事

  1. $data是一个未定义的数组,您正在将模型函数返回的结果数组设置为其的'res'
  2. dataString不是json,也不是您要发送的js数组
  3. 因为您使用过json_encode,所以在ajax成功中需要使用JSON.parse(data)
  4. 如果您在$data['res']中得到了结果,则需要执行类似的操作-data=JSON.parse(data)['res'];现在可以从id获得data[0]

答案 2 :(得分:0)

我认为查询返回空值,请尝试使用此代码.....

 public function get_menu_check($root_id)
        {
                $data = $this->db->select('C1.menu_code,C1.menu_name')
                                 ->from('create_menu as C1')
                                 ->where('C1.menu_root_id',$root_id)
                                 ->order_by('C1.menu_code')
                                 ->get();
               if($data->num_rows() >= 0)
                  return $data->result_array();
               else
                  return false;
        }