JSON.parse:意外字符
Posted
技术标签:
【中文标题】JSON.parse:意外字符【英文标题】:JSON.parse: unexpected character 【发布时间】:2012-03-30 03:20:45 【问题描述】:我正在尝试从 php jquery 传递一个 json,在进入一个 sql 查询数组并得到以下 javascript 错误之后。
JSON.parse: unexpected character
返回sql结果的函数:
public function selectassocSql($sql)
$i = 0;
$resSelect = array();
mysql_query("SET NAMES 'utf8'");
$result = mysql_query($sql);
while ( $row = mysql_fetch_assoc($result) )
$resSelect[$i] = $row;
$i++;
mysql_free_result($result);
return $resSelect;
这样使用该功能后,
$sql = "SELECT id, code, name FROM table WHERE code LIKE '%$codcli%' ";
$v = $data->selectassocSql($sql);
echo json_encode($v, JSON_FORCE_OBJECT);
而 javascript 代码是这样的:
$('#formclientes').submit(function(e)
e.preventDefault();
$.ajax(
type: 'POST',
url:$(this).attr('action'),
data:$(this).serialize(),
success:function(data)
//console.log("SUCCESS " + data);
var json_cli = $.parseJSON(data);
)
)
如何更正此错误以及如何从 jquery 读取 json?
【问题讨论】:
你有一个 SQL 注入漏洞。 要更正错误,您必须拥有有效的 JSON。显然您的 PHP 脚本没有创建有效的 JSON。json_encode($v, JSON_FORCE_OBJECT)
的输出示例会有所帮助。
在尝试解析之前先在您的 JS 中转储 data
,确保其中除了 json 之外没有其他内容(例如,没有 php 警告/错误消息)。
@FelixKling 他不需要 $.parseJSON 调用,jQuery 猜测 dataType 并为你解析响应:data 已经是一个 json
@FelixKling: json_encode
总是返回有效的 json(例如 string(4) "null"
),但是,错误报告和显示错误可能会设置为输出更多内容而不仅仅是json 字符串。
【参考方案1】:
您不需要 $.parseJSON
调用,因为 jQuery 会自动执行此操作,因为如果您不指定 dataType
属性,jQuery 会尝试猜测它并调用正确的函数来解析响应,然后再处理数据成功函数
$.ajax(
type: 'POST',
url:$(this).attr('action'),
data:$(this).serialize(),
success:function(data)
//console.log("SUCCESS " + data);
var json_cli = data;
)
也请查看这个问题Why is 'jQuery.parseJSON' not necessary?
【讨论】:
【参考方案2】:我刚刚在 FF10.0.2 中遇到了这个问题,数据看起来像:
[ "firstName": 'Joe', "lastName": 'Smith' ]
(数组中有多个对象 - 为清楚起见缩短)
不过,它实际上使用 eval 而不是 JSON.parse 解析成功。 (我这里没有使用 jQuery。)
当我将值更改为 ' 时,问题就消失了:
[ "firstName": "Joe", "lastName": "Smith" ]
我认为 " 要求仅适用于属性名称,而不适用于数据值。
【讨论】:
以上是关于JSON.parse:意外字符的主要内容,如果未能解决你的问题,请参考以下文章
Jquery File Upload SyntaxError: JSON.parse: JSON 数据后出现意外的非空白字符
SyntaxError:JSON.parse:意外字符在我的控制台中?
Joomla JSON.parse:JSON 数据后出现意外的非空白字符
角/弹簧靴|错误:SyntaxError:“JSON.parse:JSON 数据的第 1 行第 1 列出现意外字符”
SyntaxError:JSON.parse:尝试插入 mysql 时 JSON 数据的第 1 行第 1 列出现意外字符