CodeIgniter控制器AJAX请求返回HTML响应问题咨询
为什么向CodeIgniter控制器发起AJAX请求时,空函数会返回当前视图HTML?
问题场景
向CodeIgniter的fetch_lgas方法发起AJAX请求时,即便该控制器函数没有任何显式返回内容,网络响应却返回了当前页面的完整HTML代码。
前端AJAX代码
$('#lgaStateField').change(function(){ var state = $(this).val(); if(state != 0){ $('#lgaField').attr('disabled', false); $(processOngoing).css('display', 'block'); $.ajax({ url: "<?=base_url('adverts-report/fetch-lgas')?>", type: 'post', data: {stateId : state}, success: function(r){ // console.log(r);return false; // const resLgas = JSON.parse(r); // $('#lgaField').empty().append('<option value="0">Select Lga</option>'); // for(var i = 0; i < resLgas.length; i++){ // $('#lgaField').append('<option value="' + resLgas[i].id + '">' + resLgas[i].name + '</option>'); // } $(processOngoing).css('display','none'); }, error: function(err){ console.log(err); $(processOngoing).css('display','none'); } }) } })
控制器代码
public function fetch_lgas(){ }
原因分析
CodeIgniter框架的MVC执行逻辑中,若控制器方法未明确终止输出,框架会自动尝试根据控制器名和方法名匹配并加载对应的视图文件。另外,如果你的控制器继承了自定义父控制器,父控制器的构造函数或后置处理逻辑可能自动触发了视图渲染,导致空函数仍会输出当前页面的HTML内容。
解决办法
针对不同需求,有两种处理方式:
仅需返回空响应
在控制器方法中明确终止输出,阻止框架自动渲染视图:public function fetch_lgas(){ // 直接终止输出,最简单的方式 exit; // 或者使用CodeIgniter官方输出类规范处理 // $this->output->set_output(''); }需要返回业务数据(如JSON)
设置正确的响应头并输出数据,同时终止后续渲染:public function fetch_lgas(){ // 示例:获取LGAs数据 $stateId = $this->input->post('stateId'); $lgas = $this->your_model->get_lgas_by_state($stateId); // 设置JSON响应头并输出数据 $this->output ->set_content_type('application/json') ->set_output(json_encode($lgas)); }
内容的提问来源于stack exchange,提问作者Abua Isaac
相关产品推荐
相关产品推荐

