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

Codeigniter按下拉框所选年份统计预算利润总和填充输入框错误排查

代码错误点汇总
  • 前端JS部分错误

    1. 事件监听回调函数缺失闭合括号,会直接报语法错误
    2. 仅判断了val === '2021'才发起请求,其余年份选中无响应,如果后续要支持多年份需要移除该判断
    3. 给只读输入框赋值错误使用了html()方法,<input>是单标签,赋值需要用val()方法
    4. 混合使用原生事件监听和jQuery选择器,虽然不影响运行但代码风格不统一
  • 控制器部分错误

    1. 处理AJAX请求时使用了redirect()跳转,AJAX请求需要直接返回数据而非跳转页面,跳转后前端拿到的是整个页面的HTML内容,无法拿到利润值
    2. 没有接收前端POST传递的年份参数,无法传递给模型做动态筛选
    3. 模型返回的查询结果没有输出给前端,AJAX的success回调无法拿到有效数据
    4. 不需要设置flashdata,flashdata是页面跳转时用的,AJAX场景完全无效
  • 模型部分错误

    1. like条件的字段写错了:你是要按年份筛选,应该对应表中的日期字段(比如create_time、budget_date等,根据你表的实际字段名修改),现在写的是surplus(利润字段),完全筛选不到对应年份的数据
    2. like的字段名用了中文弯引号‘surplus’,PHP会直接报语法错误
    3. 年份筛选写死为2021-,没有接收控制器传过来的年份参数,无法支持动态年份查询
    4. 查询完成后没有返回结果,需要取出sum的利润值返回给控制器

修复后代码

视图JS部分

// 直接用jQuery绑定事件,避免混写原生代码
$('#SelectOption').on('change', function() {
  var val = $(this).val();
  console.log(val);
  if(val) { // 只要选中有效年份就发起请求,不用仅限制2021
    $.ajax({
      type: "POST",
      url : "<?php echo base_url(); ?>Reports/get_profit",
      data:{year:val},
      dataType: 'json', // 约定返回json格式数据
      success: function(res){
        if(res.code === 1) {
          $('#profitdiv').val(res.profit); // 用val()给input输入框赋值
        } else {
          $('#profitdiv').val('0');
          alert(res.msg);
        }
      },
      error: function() {
        alert('请求失败,请重试');
      }
    });
  } else {
    $('#profitdiv').val(''); // 未选中年份时清空输入框
  }
});

控制器部分

public function get_profit()
{
    // 接收前端传递的年份参数
    $year = $this->input->post('year');
    $res = ['code' => 0, 'msg' => '查询失败', 'profit' => 0];
    if(empty($year)) {
        echo json_encode($res);
        exit;
    }
    $this->load->model('Reports_model');
    $profit = $this->Reports_model->select_profit($year);
    if($profit !== false) {
        $res['code'] = 1;
        $res['msg'] = '查询成功';
        $res['profit'] = $profit ?: 0;
    }
    // 直接输出json结果给前端,禁止跳转
    echo json_encode($res);
    exit;
}

模型部分

function select_profit($year)
{
    $this->db->select_sum("surplus");
    $this->db->from("budget_tbl");
    // 此处的date_field请替换为你预算表中存储日期的实际字段名,比如budget_date、create_time等
    $this->db->like('date_field', $year.'-', 'after');
    $qry = $this->db->get();
    if($qry->num_rows() > 0) {
        // 返回求和后的利润值
        return $qry->row()->surplus;
    }
    return false;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 14:45:03