@liayun
2016-05-10T12:06:30.000000Z
字数 1792
阅读 2951
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语言一点儿也不熟
<?php
require 'config.php';
$query = mysql_query("SELECT title,content,user,date FROM question ORDER BY date DESC LIMIT 0,5") or die('SQL 错误!');
$json = '';
while (!!$row = mysql_fetch_array($query, MYSQL_ASSOC)) {
//json格式转码
foreach ( $row as $key => $value ) {
$row[$key] = urlencode(str_replace("\n","", $value)); // 这是将\n控制字符替换为空,但忽略了\t控制字符
}
$json .= urldecode(json_encode($row)).',';
//$json .= json_encode($row).','; // 得到json格式
//print_r($row); // 以php数组的形式显示出来,javascript不能直接用,那么最好将其保存为json格式
}
//echo $json;
echo '['.substr($json, 0, strlen($json) - 1).']'; //一个json数组,一个数组有3个对象,每个对象就是一个json
mysql_close();
?>
所以修改之后的代码为:
<?php
require 'config.php';
$query = mysql_query("SELECT title,content,user,date FROM question ORDER BY date DESC LIMIT 0,5") or die('SQL 错误!');
$json = '';
while (!!$row = mysql_fetch_array($query, MYSQL_ASSOC)) {
//json格式转码
foreach ( $row as $key => $value ) {
$row[$key] = urlencode(str_replace("\n","", $value));
$row[$key] = urlencode(str_replace("\t","", $value)); // 这里将\n、\t控制字符替换为空
}
$json .= urldecode(json_encode($row)).',';
//$json .= json_encode($row).','; // 得到json格式
//print_r($row); // 以php数组的形式显示出来,javascript不能直接用,那么最好将其保存为json格式
}
//echo $json;
echo '['.substr($json, 0, strlen($json) - 1).']'; //一个json数组,一个数组有3个对象,每个对象就是一个json
mysql_close();
?>
前端代码就比较简单了:
$.ajax({
url : "show_content.php",
type : "post",
success : function(response, status, xhr) {
//alert(response); //取出数据
//alert(typeof response); //string
alert($.parseJSON(response)); //object
}
});