php - 如何在不刷新页面的情况下根据选择框值从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>
解决方案
我注意到了一些事情
$data
是一个未定义的数组,您将模型函数返回的结果数组设置为它的'res'
键dataString
不是 json 也不是您要发送的 js 数组- 既然你用了
json_encode
,你需要JSON.parse(data)
在ajax成功使用 - 如果你确实有结果
$data['res']
,那么你需要做这样的事情 -data=JSON.parse(data)['res'];
现在你可以id
从data[0]
推荐阅读
- odoo-13 - 在 pos order odoo 中打印收据
- javascript - 如何提取暗模式和切换的编码?
- node.js - 单个文件在表格的多行中上传 - 反应中的表单数据,在节点中使用 express - 仅需要建议
- html - 将文本与 tailwindcss 垂直对齐
- c - C regexec 返回错误的结果
- java - 如何为 Apache Drill 创建自定义非存储插件
- angular - 任何带有 Angular 自动完成功能的文本框库?
- flutter - Flutter Drawer 与底部导航栏重叠
- c++ - 如何修复查找不存在的头文件的 Visual Studio 项目?
- visual-studio-code - 如何从 Visual Studio 代码扩展中获取主机操作系统名称?