为什么 javascript 不解析这个字符串?

    当我将 json 编码值从 PHP 传递到 Javascript 并仅在控制台记录它时,它返回给我:


{"id":"4","username":"muzikant346","coins":"675","avatar1":"1","avatar2":"0","avatar3":"0","avatar4":"0","avatar_selected":"0"}

这是一个字符串,当我想用 Javascript 解析它时,它返回一个错误:


eUncaught SyntaxError: Unexpected token  in JSON at position 0

at JSON.parse (<anonymous>)

at Object.success (welcome.js:11)

at c (jquery-3.4.1.min.js:2)

at Object.fireWith [as resolveWith] (jquery-3.4.1.min.js:2)

at l (jquery-3.4.1.min.js:2)

at XMLHttpRequest.<anonymous> (jquery-3.4.1.min.js:2)

我不明白为什么 javascript 不能解析这个。


有我的 PHP(从数据库中获取)代码:


$sql = "SELECT * FROM serbian_values WHERE username = '$username'";

        $result = mysqli_query($link, $sql);

        if($result){

            while($row = mysqli_fetch_assoc($result)){

                $value[] = $row;

            }

            echo json_encode($value[0]); 

        }


凤凰求蛊
浏览 138回答 3
3回答

暮色呼如

AU+FEFF : ZERO WIDTH NO-BREAK SPACE [BOM] {BOM, ZWNBSP}不是用于开始 JSON 文本的有效字符。它被插入到 PHP 程序输出的开头(或者在你没有向我们展示的 JS 中解析之前混合,但这种可能性较小)。可能这是您从 PHP 输出charset的标头上出现的错误所使用的Content-Type,但该字符可能只是潜伏在源代码中的某个地方。使用十六进制编辑器可能最容易找到。

喵喵时光机

修复第一个 BOM 字符的另一种方法,function stripBOM(content) {&nbsp; content = content.toString()&nbsp; if (content.charCodeAt(0) === 0xFEFF) {&nbsp; &nbsp; content = content.slice(1)&nbsp; }&nbsp; return content}console.log(JSON.parse(stripBOM(obj)));参考 https://gist.github.com/pbakondy/f5045eff725193dad9c7

繁华开满天机

JSON.parse只能解析string元素。一种解决方案是首先将您的 JSON 字符串化:JSON.parse(JSON.stringify({"id":"4","username":"muzikant346","coins":"675","avatar1":"1","avatar2":"0","avatar3":"0","avatar4":"0","avatar_selected":"0"}));
打开App,查看更多内容
随时随地看视频慕课网APP