Php 当输出->;时,CodeIgniter json请求无法修改头信息;set#U头用于控制器';s构造函数

Php 当输出->;时,CodeIgniter json请求无法修改头信息;set#U头用于控制器';s构造函数,php,json,codeigniter,http-headers,Php,Json,Codeigniter,Http Headers,我有一个自定义控制器扩展CI_控制器(codeigniter版本2.1.4),它有以下代码 class SM_Restricted extends CI_Controller { public function __construct() { parent::__construct(); $this->output->set_header('Last-Modified:'.gmdate('D, d M Y H:i:s').'GMT'); $this->

我有一个自定义控制器扩展CI_控制器(codeigniter版本2.1.4),它有以下代码

class SM_Restricted extends CI_Controller {

public function __construct()
{
    parent::__construct();

    $this->output->set_header('Last-Modified:'.gmdate('D, d M Y H:i:s').'GMT');
    $this->output->set_header('Cache-Control: no-store, no-cache, must-revalidate');
    $this->output->set_header('Cache-Control: post-check=0, pre-check=0',false);
    $this->output->set_header('Pragma: no-cache');

    if (!$this->session->userdata('isLoggedIn')){
        redirect('login','refresh');
    }
}}
除登录控制器外,所有其他控制器都从该控制器扩展

所有视图都加载良好。但是,当向任何控制器发出JSON请求时,“无法修改头信息”错误会写入日志文件,但响应没有错误。如果我从构造函数中删除set_Header()函数,则JSON请求工作正常,不会记录错误


为什么会这样?如何克服这种情况?

您可以检查AJAX请求并相应地加载头

if(!$this->input->is_ajax_request())
{
    $this->output->set_header('Last-Modified:'.gmdate('D, d M Y H:i:s').'GMT');
    $this->output->set_header('Cache-Control: no-store, no-cache, must-revalidate');
    $this->output->set_header('Cache-Control: post-check=0, pre-check=0',false);
    $this->output->set_header('Pragma: no-cache');
}

希望这能有所帮助。

Hi Craig..谢谢你的解决方案。你知道为什么会发生这种情况吗?你的日志文件中有什么吗?在修复错误不再出现之后。自从我启用了所有类型的日志记录以来,所有调试语句都在那里。在修复之前,对于每个JSON请求,日志都有4条错误消息,每条消息指向“echo JSON_encode($response)”行。示例错误:严重性:警告-->无法修改标题信息-标题已由(输出开始于/var/www/html/appname/application/controllers/dashboard.php:66)/var/www/html/appname/system/core/output.php 391)发送