0

我有这样的 CI 探查器: $this->output->enable_profiler(TRUE) 在我的控制器中。

这给出了 JSON.parse: unexpected non-whitespace character 错误。当我关闭分析器时,它就可以了。

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

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

4

2 回答 2

2

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

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

你也可以放:

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

在您的 ajax 控制器方法中,因此该方法不包括探查器数据/字符串。

于 2013-04-24T18:21:09.693 回答
0

首先,是的,我知道这个问题已经有 4 年的历史了,但是从 2013 年到 2017 年,Ajax 调用在我们的网站/网络系统上变得更加流行,并且没有关于服务器端性能的反馈不是一种选择对我来说,这就是我所做的:

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 中处于活动状态,即使在 DEVELOPMENT 中,只要在您实际分析应用程序时使用它,否则您可能会更好没有它。

希望它对其他人有帮助,因为它对我有用。

于 2017-08-28T00:16:42.797 回答