我有这样的 CI 探查器: $this->output->enable_profiler(TRUE) 在我的控制器中。
这给出了 JSON.parse: unexpected non-whitespace character 错误。当我关闭分析器时,它就可以了。
我发现 ajax 响应文本也有分析器信息。
有人可以启发我吗。如何在 CI 中打开分析器并避免 jason 解析错误。提前谢谢
我有这样的 CI 探查器: $this->output->enable_profiler(TRUE) 在我的控制器中。
这给出了 JSON.parse: unexpected non-whitespace character 错误。当我关闭分析器时,它就可以了。
我发现 ajax 响应文本也有分析器信息。
有人可以启发我吗。如何在 CI 中打开分析器并避免 jason 解析错误。提前谢谢
我在我的核心控制器类中这样做(扩展 CI_Controller 并且是我所有应用程序控制器的父类):
if(!$this->input->is_ajax_request()) {
$this->output->enable_profiler(TRUE);
}
你也可以放:
$this->output->enable_profiler(FALSE);
在您的 ajax 控制器方法中,因此该方法不包括探查器数据/字符串。
首先,是的,我知道这个问题已经有 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 中,只要在您实际分析应用程序时使用它,否则您可能会更好没有它。
希望它对其他人有帮助,因为它对我有用。