繁体   English   中英

如何在没有刷新页面的情况下根据选择框值从codeigniter中获取数据库中的值?

[英]how to get values from database in codeigniter based on select box value without refreshing page?

无法从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>

希望这个能对您有所帮助 :

更换

$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. $data是一个未定义的数组,你将模型函数返回的结果数组设置为'res'
  2. dataString不是json,也不是你要发送的js数组
  3. 因为您使用了json_encode ,所以需要在ajax成功中使用JSON.parse(data)
  4. 如果你确实在$data['res']得到了结果,那么你需要做这样的事情 - data=JSON.parse(data)['res']; 现在你可以从data[0]获取id

我认为查询返回空请试试这个代码.....

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM