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 列出现意外字符

ReactJS 和 Node.JS [JSON.parse:JSON 数据的第 1 行第 1 列出现意外字符]