【发布时间】:2015-04-12 20:14:51
【问题描述】:
我在 CodeIgniter PHP 页面上使用 getJSON 进行 jquery ajax 调用,但回显的 json 字符串在第 1 行第 1 列包含意外字符。 实际上它是一个奇怪的字符(在 Chrome 控制台上由一个红点表示)并且在任何回声之前:如果我从 php 文件中删除 json 输出以及任何其他输出(即代码什么都不做),仍然很奇怪字符被打印(我可以从 Chrome 的控制台看到它)。 此外,如果我使用浏览器直接调用页面,则看不到奇怪的字符(也在检查代码)。 Ajax 响应很好:状态 200,除了奇怪的字符,格式是有效的。 似乎框架本身在输出之前添加了一些东西。
关于我的 Codeigniter 配置的一些信息: - 版本 3.0 - i18n - 树枝 - HMVC
JS 库: - jQuery v2.1.3 - jQuery-iu v1.11.4
PHP代码sn-p:
$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);
});
【问题讨论】:
-
尝试评论这一行 $this->output->set_content_type('application/json');
-
我认为 $this->lang->language 可能是问题尝试
$this->lang->line('sample') -
不幸的是既不是 content_type 也不是语言功能。我已经注释掉了他们两个,还注释了所有内容(= 没有回声),但是无法识别的字符仍然存在。一个人,但仍然在那里。
-
还将 php 代码移动到另一个模块,得到同样的问题。有什么办法可以看到服务器发送到页面的所有完整输出(包括标题)? (我在 XAMPP 下运行 Apache)
-
我找到问题了!!我在每个步骤之后都检查了 ajax 调用的环境的全新安装,结果发现问题出在我的路由规则(我从 i18n 库中获取):$route['^(en |it)/(.+)$'] = "$2"; 这个路由添加了奇怪的字符。任何人都可以弄清楚为什么??
标签: ajax json codeigniter getjson parse-error