启用CI事件探查器会导致json解析错误

时间:2013-04-24 17:59:32

标签: codeigniter

我有这样的CI分析器: $这 - >输出 - > enable_profiler(TRUE) 在我的控制器里。

这给出了JSON.parse:意外的非空白字符错误。当我关闭探测器时,它就可以了。

我发现ajax响应文本也有分析器信息。

有人可以启发我吗? 如何在CI中打开探查器并避免jason解析错误。 提前谢谢

2 个答案:

答案 0 :(得分:2)

我在我的核心控制器类中这样做(扩展CI_Controller并且是我所有app控制器的父类):

if(!$this->input->is_ajax_request()) {
    $this->output->enable_profiler(TRUE);
}

你也可以把:

$this->output->enable_profiler(FALSE);

在你的ajax控制器方法中,所以THAT方法不包括探查器数据/字符串。

答案 1 :(得分:0)

首先,是的,我知道这个问题是+4岁,但从2013年到2017年,Ajax Calls在我们的网站/网络系统上变得更受欢迎,并且没有对服务器端性能的反馈不是我的选择,所以这就是我所做的:

application \ core \ MY_Controller.php :(将探查器加载为库)

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class MY_Controller extends CI_Controller {

    public function __construct(){
        parent::__construct();
        if(ENVIRONMENT === 'development'){
            $this->load->library('profiler'); //(don't use: $this->output->enable_profiler(FALSE), use it as a library!)
        }
    }
}

在你需要的地方和时间获得输出:(记住扩展MY_Controller而不是CI_Controller)

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class Somecontroller extends MY_Controller {

    function ajaxCall()
    {
        // Do some stuff
        $ret = array(
            'something' => 'yada yada yada',
            '_profiler' => $this->profiler->run()
            );
        header("Content-type:application/json");
        return print(json_encode($ret));
    }

}

现在在你的Javascript中追加探查器输出而不破坏你的JSON结构:

<script>
    var ajaxReturn; // Your prefered ajax call (native JS or jQuery or wathever)
    if ( typeof ajaxReturn === 'string') {
        ajaxReturn = JSON.parse(ajaxReturn);
    }
    //-- Do some stuff
    //-- Append the profiler output
    document.getElementByTagName('body')[0].append(ajaxReturn._profiler); //-- or jQuery: $('body').append(ajaxReturn._profiler);
</script>

最后的说明:

当然,这个方法会使用广泛的HTML为探查器调用你的ajax调用,所以永远不要让这个探查器在PRODUCTION中保持活跃状态​​,甚至在开发时只使用它当你实际剖析你的应用程序时,否则你可能会更好没有它。

希望它可以帮助别人,因为它对我有用。