我正在CodeIgniter PHP页面上使用getJSON进行jquery ajax调用,但返回的json字符串在第1行第1列包含意外字符。事实上,它是一个wierd字符(在Chrome控制台上用一个红点表示),并为任何回声做了准备:如果我从php文件中删除json输出和任何其他输出(即代码什么都不做),仍然会打印出奇怪的字符(我可以从Chrome控制台上看到它)。此外,如果我用浏览器直接调用页面,那么奇怪的字符是不可见的(也检查代码)。Ajax响应很好:状态200,除了wierd字符外,格式是有效的。框架本身似乎为输出做了一些准备。
关于我的Codeigniter配置的一些信息:-3.0版-i18n-Twig-HMVC
JS库:-jQuery v2.1.3-jQuery iu v1.11.4
PHP代码片段:
$productionHierArr = array(
"productionHier" => $productionHier,
"dictionary" => $this->lang->language
);
$this->output->set_content_type('application/json');
echo json_encode($productionHierArr);
最后要注意的是,同样的代码在我之前的CodeIgniter 2.2.1环境中运行得很好,没有HMVC。谢谢你的帮助。
编辑
这是JS代码:
var ajaxHier = $.getJSON("item/getProductionHierJson");
$.when( ajaxHier ).done(function( data, textStatus, jqXHR ) {
initHier(data);
})
.fail(function(jqXHR, textStatus, errorThrown) {
console.log("error: ", textStatus);
console.log("errorThrown: ", errorThrown);
});
在Chrome中,红点通常表示不可打印的特殊unicode字符。
请检查您的服务器端代码,以防止输出这些字符
编辑更好地使用UTF-8编码,而不使用BOM。这可以通过记事本++轻松完成。步骤如下,
在记事本++中打开您的文件。转到文件菜单上的编码选项。然后选择"转换为不带BOM的UTF-8"选项。这可能会解决您的问题。
对于其他可能遇到相同问题的人,这是我经过两天调查后发现的解决方案:事实证明,"core"文件夹中的文件"MY_Lang.php"是用带有BOM的UTF8编码的,而它当然应该是没有BOM的UTF8。幸运的是,我有一个这个东西的工作版本,通过逐个细节的比较,我可以解开这个谜
不管怎样,@Sekai走在了正确的轨道上,(对不起,没有足够的声誉获得+1),谢谢。