[关闭]
@liayun 2016-05-10T12:06:30.000000Z 字数 1792 阅读 2907

SyntaxError: JSON.parse: bad control character in string literal...

jQuery 知问前端


一个知问前端,做一个ajax应用,服务器返回json格式的字符串,由jQuery分析并输出到页面上,就遇到以上的问题。在控制台报错如下:

SyntaxError: JSON.parse: bad control character in string literal at line 1 column 1842 of the JSON data

英文很差,所以得转换为中文:

语法错误: 在JSON格式数据的第1行第1842列下,字符串文字有一个糟糕的控制字符。

翻译成渣,忽略之!
bad control character一多半就是\n\t等非打印的控制字符。解决办法:要么删除特殊字符,要么将这些不可打印字符替换为空即可。

我本人出现这个错误,是因为没有考虑到\t控制字符,解决办法选择将这些不可打印字符替换为空。

我服务器端代码,show_content.php我对PHP语言一点儿也不熟

  1. <?php
  2. require 'config.php';
  3. $query = mysql_query("SELECT title,content,user,date FROM question ORDER BY date DESC LIMIT 0,5") or die('SQL 错误!');
  4. $json = '';
  5. while (!!$row = mysql_fetch_array($query, MYSQL_ASSOC)) {
  6. //json格式转码
  7. foreach ( $row as $key => $value ) {
  8. $row[$key] = urlencode(str_replace("\n","", $value)); // 这是将\n控制字符替换为空,但忽略了\t控制字符
  9. }
  10. $json .= urldecode(json_encode($row)).',';
  11. //$json .= json_encode($row).','; // 得到json格式
  12. //print_r($row); // 以php数组的形式显示出来,javascript不能直接用,那么最好将其保存为json格式
  13. }
  14. //echo $json;
  15. echo '['.substr($json, 0, strlen($json) - 1).']'; //一个json数组,一个数组有3个对象,每个对象就是一个json
  16. mysql_close();
  17. ?>

所以修改之后的代码为:

  1. <?php
  2. require 'config.php';
  3. $query = mysql_query("SELECT title,content,user,date FROM question ORDER BY date DESC LIMIT 0,5") or die('SQL 错误!');
  4. $json = '';
  5. while (!!$row = mysql_fetch_array($query, MYSQL_ASSOC)) {
  6. //json格式转码
  7. foreach ( $row as $key => $value ) {
  8. $row[$key] = urlencode(str_replace("\n","", $value));
  9. $row[$key] = urlencode(str_replace("\t","", $value)); // 这里将\n、\t控制字符替换为空
  10. }
  11. $json .= urldecode(json_encode($row)).',';
  12. //$json .= json_encode($row).','; // 得到json格式
  13. //print_r($row); // 以php数组的形式显示出来,javascript不能直接用,那么最好将其保存为json格式
  14. }
  15. //echo $json;
  16. echo '['.substr($json, 0, strlen($json) - 1).']'; //一个json数组,一个数组有3个对象,每个对象就是一个json
  17. mysql_close();
  18. ?>

前端代码就比较简单了:

  1. $.ajax({
  2. url : "show_content.php",
  3. type : "post",
  4. success : function(response, status, xhr) {
  5. //alert(response); //取出数据
  6. //alert(typeof response); //string
  7. alert($.parseJSON(response)); //object
  8. }
  9. });
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注