我有这样的CI分析器: $这 - >输出 - > enable_profiler(TRUE) 在我的控制器里。
这给出了JSON.parse:意外的非空白字符错误。当我关闭探测器时,它就可以了。
我发现ajax响应文本也有分析器信息。
有人可以启发我吗? 如何在CI中打开探查器并避免jason解析错误。 提前谢谢
答案 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中保持活跃状态,甚至在开发时只使用它当你实际剖析你的应用程序时,否则你可能会更好没有它。
希望它可以帮助别人,因为它对我有用。