You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CodeIgniter使用AJAX选择分类后加载子分类报500错误如何解决?

CodeIgniter分类联动功能500错误解决

场景说明

开发CodeIgniter站点的表单分类联动功能,选中主分类后通过AJAX请求加载对应子分类,请求返回500错误无法正常加载。

相关代码

前端JS代码

$(document).ready(function() {
  $('#country').change(function() {
    var country_id = $('#country').val();
    if (country_id != '') {
      $.ajax({
        url: "<?php echo base_url(); ?>index.php/homecontroller/fetchstate",
        method: "POST",
        data: {
          country_id: country_id
        },
        success: function(data) {
          $('#state').html(data);
          $('#city').html('<option value="">Select Brand</option>');
        }
      });
    } else {
      $('#state').html('<option value="">Select Category</option>');
      $('#city').html('<option value="">Select Brand</option>');
    }
  });
});

表单HTML代码

<form action="" method="post">
  <label for="inputEmail4">Category</label>
  <select id="country" class="form-control" name="cname" aria-label="Default select example">
    <option>Select Category</option>
    <?php
    foreach($listcategory as $vals){
      echo '<option value="'.$vals->name.'">'.$vals->name.'</option>';
    }?>
  </select>
  <label for="inputEmail4">Brand</label>
  <select class="form-control" name="sname" id="state">
    <option value="">Select Brand</option>
  </select>

控制器代码

function fetchstate()
{
  if($this->input->post('country_id'))
  {
    echo $this->excel_import_model->fetch_state($this->input->post('country_id'));
  }
}

模型代码

function fetch_state($country_id)
 {
  $this->db->where('inventorycategory', $country_id);
  $this->db->order_by('name', 'ASC');
  $query = $this->db->get('inventorybrand');
  $output = '<option value="">Select Brand</option><option value="None">None</option>';
  foreach($query->result() as $row)
  {
   $output .= '<option value="'.$row->name.'">'.$row->name.'</option>';
  }
  return $output;
 }

报错信息

POST http://localhost/letsship/index.php/homecontroller/fetchstate 500 (Internal Server Error)

排查方案

  • 检查控制器是否加载对应模型:确认homecontroller的构造方法中已经加载excel_import_model,加载代码为$this->load->model('excel_import_model');,未加载直接调用模型方法会触发500错误。
  • 检查CSRF防护配置:如果站点开启了全局CSRF校验,AJAX POST请求未携带CSRF token会被拦截。解决方法是在AJAX请求参数中添加token:
    先在页面中获取token信息:
    var csrfName = '<?php echo $this->security->get_csrf_token_name(); ?>';
    var csrfHash = '<?php echo $this->security->get_csrf_hash(); ?>';
    
    再修改AJAX的data参数:
    data: {country_id: country_id, [csrfName]: csrfHash},
    
  • 检查控制器方法权限:确认fetchstate方法为public类型,私有/受保护方法无法被外部URL直接访问。
  • 检查数据库相关配置:确认inventorybrand表、inventorycategory字段真实存在,名称没有拼写错误,数据库连接配置正确。
  • 开启调试模式定位具体错误:临时将站点根目录index.php中的ENVIRONMENT设置为development,再次请求接口即可看到具体的PHP错误提示,快速定位问题。

内容的提问来源于stack exchange,提问作者sim papa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 00:36:10