Codeigniter中AJAX联动下拉框返回null,字段无法显示求助
问题排查与修复方案
我帮你梳理了代码里的几个关键问题,这些应该就是导致返回null、字段无法正常显示的原因,一步步来修改:
1. AJAX请求方式与Controller参数接收不匹配
你的JS里AJAX默认是GET请求,但Controller里用$this->input->post('kode_penitipan')接收参数,这就导致后端拿不到选中的ID,自然查不到数据返回null。
修复方案(二选一)
方案一:修改AJAX为POST请求(推荐)
function getdata(selectElement) { var kode_penitipan = selectElement.value; // 直接用传入的下拉框元素值,无需重复查询DOM $.ajax({ url: '<?php echo site_url('transaksi/getPenitip') ?>', type: 'POST', // 指定POST请求类型 data: { kode_penitipan: kode_penitipan }, // 用对象格式传参更规范 dataType: 'json', // 告诉jQuery返回的是JSON,自动解析为对象 success: function (data){ if(data){ // 先判断数据存在再赋值 $('#kode_deskripsi').val(data.kode_deskripsi); $('#time_in').val(data.time_in); } console.log(data); } }); }
方案二:修改Controller用GET方式接收参数
public function getPenitip() { $kode_penitipan = $this->input->get('kode_penitipan'); // 改为get接收 $data = $this->M_Transaksi->getAutocomplete($kode_penitipan); echo json_encode($data); }
2. Model中查询结果遍历错误
你在Model里直接foreach ($query as $key)是错误的,因为$this->db->get('penitipan')返回的是CodeIgniter的查询结果对象,不能直接遍历。而且根据业务场景,kode_penitipan应该是唯一标识,直接获取单条数据即可。
修复后的Model代码
public function getAutocomplete($kode_penitipan) { $this->db->where('kode_penitipan', $kode_penitipan); $this->db->where('status', '1'); $query = $this->db->get('penitipan'); if ($query->num_rows() > 0) { $row = $query->row(); // 获取单条数据对象 return array( 'kode_deskripsi' => $row->kode_deskripsi, 'time_in' => $row->time_in, ); } else { return null; // 无数据时明确返回null } }
3. 额外优化:简化JS函数参数
原来的函数参数没用到,直接用传入的下拉框元素获取值更高效,避免重复查询DOM(已经在方案一的JS代码里体现了)。
测试建议
可以先在Controller里临时打印接收的参数,确认是否正确传递:
public function getPenitip() { $kode_penitipan = $this->input->post('kode_penitipan'); var_dump($kode_penitipan); // 查看是否拿到选中的ID $data = $this->M_Transaksi->getAutocomplete($kode_penitipan); echo json_encode($data); }
如果var_dump输出null,就回到AJAX的请求方式和参数传递问题上排查。
内容的提问来源于stack exchange,提问作者wahyurmd
相关产品推荐
相关产品推荐

