【问题标题】:CodeIgniter, getJSON parse error: unexpected character at line 1 column 1 of the JSON dataCodeIgniter,getJSON 解析错误:JSON 数据的第 1 行第 1 列出现意外字符
【发布时间】: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


【解决方案1】:

在 Chrome 中,红点通常代表不可打印的特殊 unicode 字符。

请检查您的服务器端代码以防止输出这些字符

编辑 最好用没有 BOM 的 UTF-8 对它们进行编码。这可以通过记事本++轻松完成。步骤如下,

在记事本++ 中打开您的文件。 转到文件菜单上的编码选项。 然后选择“转换为不带 BOM 的 UTF-8”选项。 这可能会解决您的问题。

【讨论】:

  • 谢谢,但我已经设置好了。现在再次仔细检查,它是没有 BOM 的 UTF-8。
  • 你能不能 var_dump $productionHierArr 并将内容放在这里?
【解决方案2】:

对于可能遇到相同问题的其他人,这是我经过两天调查找到的解决方案: 事实证明,“core”文件夹中的文件“MY_Lang.php”是用 UTF8 with BOM 编码的,而它当然应该是 UTF8 without BOM。 幸运的是,我有这个东西的工作版本,并且逐个详细地比较我可以解决这个谜。
无论如何,@Sekai 是在正确的轨道上,(抱歉,没有足够的声誉 +1),谢谢。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-26
    • 2014-11-02
    • 1970-01-01
    • 2017-12-19
    • 2023-02-08
    • 2022-01-12
    相关资源
    最近更新 更多