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

CodeIgniter框架下无法获取URL参数到loadLeads方法进行数据过滤

问题根因

URL中的source、status参数属于reports/lists页面的地址参数,而loadLeads是DataTable发起的独立AJAX POST请求,该请求本身没有携带原页面的URL参数,所以在loadLeads中使用$this->input->get()无法获取到对应值。

修复步骤

1. 控制器lists方法中获取参数并传入视图

你已经确认lists方法中可以正常读取URL参数,直接将参数取出传递给视图即可:

public function lists($slug='')
{
    $this->load->model(array('crm/crm_model'));  
    $content['propertyrefnos']=$this->crm_model->property_refnos();
    $content['is_mobile'] = $this->ismob;
    $content['sources']= $this->sources_model->get_active(array(),'id,title','title asc' );
    // 新增代码:读取URL参数传递给视图
    $content['source'] = $this->input->get('source');
    $content['status'] = $this->input->get('status');
    $content['slug'] = $slug;
}

2. 视图中修正变量,将参数传入AJAX请求

首先修正你视图中原有的变量名错误(PHP中定义的是$leadstatus,JS中调用的是$leadsource,名称不匹配导致值为空),再将两个参数加入AJAX的POST数据中:

<?php  
$sess=$this->session->userdata(); 
$post = array('fstatus'=> $sess['fstatus'],'fsource'=> $sess['fsource']);
$postd = json_encode(array_filter($post));
// 读取控制器传入的参数
$view_source = $source;
$view_status = $status;
?>

JS部分修改:

$(document).ready(function() {
  function sendreq(){
    setpostdatas();cleartable();getleads();
  }

   var userrole = "<?php echo $this->session->userdata('clientrole')?>";
   // 读取PHP传入的参数
   var leadsource = "<?php echo $view_source ?>";
   var leadstatus = "<?php echo $view_status ?>";
   var slug = '<?php echo $slug?>';
   var postd = '<?php echo $postd; ?>';
if( userrole > 1 && userrole != 5){
    $('#item-list').DataTable({
        "processing": true,
        "stateSave": true,
        "serverSide": true,
        "ordering": false,
          "createdRow": function( row, data, dataIndex){
            $(row).has( "div.overdueupdate" ).css('background-color','#FFC7CE');
              },
        "ajax": {
            url: "<?php echo site_url(); ?>reports/loadLeads",
            // 将参数加入POST数据
            data: {slug: slug, postdata: postd, leadsource: leadsource, leadstatus: leadstatus},
            type : 'POST',
            "dataSrc": function ( d ) {
                d.myKey = "myValue";
                if(d.recordsTotal == 0 || d.data == null){
                   $("#item-list_info").text("No records found");
                    $("#item-list_processing").css("display","none");
                }
                return d.data;
            }
        },
        'columns': [
            {"data": "id", "id": "id"},
            {"data": "refno", "refno": "refno"},
            {"data": "source", "source": "source"},   
        ]
    });
  }

3. loadLeads方法中从POST读取参数

AJAX是POST请求,所以要从POST中读取参数,不要使用GET方法:

public function loadLeads($p=''){
    // 修正为从POST读取参数
    $leadsource = $this->input->post('leadsource');
    $leadstatus = $this->input->post('leadstatus');
    if(isset($_POST['postdata'])){
        if($_POST['postdata'] != null && $_POST['postdata'] != 'null'){
            $post=$_POST['postdata'];
        }
        $post = json_decode($post,true);
        unset($post['slug']);
        unset($post['page']);
        $sort = $post['afsort'] ?? '';
        if($sort == "asc"){
            $sortQ = 'l.updated_date asc,';
        }else if ($sort == "desc"){
            $sortQ = 'l.updated_date desc,';
        }
    }
    $offset = (int)$_POST['start'] ;
    $pstdatas = explode(',', $_POST['postdata']);
    unset($pstdatas['item-list_length']);
    if($this->session->userdata('clientrole') == 1 || $this->session->userdata('clientrole') == 5 ){
        $content['leads']=$this->leads_model->get_pagination($_POST['length'],$offset,$where,'',false,$sortQ?$sortQ:'l.assign_status =\'Unassigned\' desc,',$all,$leadsource);          
    }else{
        $content['leads']=$this->leads_model->get_pagination($_POST['length'],$offset,$where,'',false,$sortQ?$sortQ:'l.assigned_date desc,',$all,$leadsource);
    }
}

4. 模型中删除多余的GET取值逻辑

你已经将$leadsource作为参数传入模型方法,直接使用即可,不需要再尝试从GET获取参数:

function get_pagination($num, $offset, $cond='',$order='',$unlimit=false,$add_order='',$all='',$leadsource)
{
    $this->db->select("l.*");
    $sess=$this->session->userdata(); 
    if(is_array($cond) && count($cond)>0){ $this->db->where($cond); }

    if(empty($cond)){           
        if($sess['afstatus']==''){
            // 删除这行多余的GET取值代码:$leadsource = $this->input->get('status');
            if($searchdata['keyword'] !='' || $searchdata['fstatus'] !='' || $searchdata['fproject'] || $searchdata['fdevelop'] || $all != ''){
                $this->db->where_in('lead_status',array(1,8,9,2,3,4,10,11)); 
                $this->db->where('lead_source',$leadsource);
            }
            else{
                $this->db->where_in('lead_status',array(1,8,9,11));
                $this->db->where('lead_source',$leadsource);
            }
        }
    }
    $query =  $this->db->get();
    return $query->result_array();
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 21:36:03