为什么javascript没有';你不能解析这个字符串吗?

为什么javascript没有';你不能解析这个字符串吗?,javascript,php,jquery,ajax,Javascript,Php,Jquery,Ajax,当我将json编码的值从PHP传递到Javascript并将其记录在控制台日志中时,它会返回以下信息: {"id":"4","username":"muzikant346","coins":"675","avatar1":"1","avatar2":"0","avatar3":"0","avatar4":"0","avatar_selected":"0"} 这是一个字符串,当我想在Javascript中解析它时,它会返回一个错误: eUncaught SyntaxError: Unexpec

当我将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)

U+FEFF:ZERO-WIDTH不间断空格[BOM]{BOM,ZWNBSP}
不是JSON文本开头的有效字符

在某个地方,它被插入到PHP程序输出的开始部分(或者在JS中解析之前被混入,您没有向我们展示过,但这不太可能)


这可能是由从PHP输出的
内容类型
标题上出现的错误
字符集
使用的,但该字符可能只是潜伏在源代码的某个地方。使用十六进制编辑器可能最容易找到它。

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"}));

修复第一个BOM表字符的另一种方法

功能条BOM(内容){
content=content.toString()
if(content.charCodeAt(0)==0xFEFF){
content=content.slice(1)
}
返回内容
}

log(JSON.parse(stripBOM(obj))危险:您很容易受到您需要从中获取信息的攻击。在上述响应中,
JSON.parse()
起作用fine@AlwaysSunny-不,没有。在第一个
U+007B:LEFT-CURLY-方括号{LEFT-brace}
之前有一个
U+FEFF:ZERO-WIDTH不间断空格[BOM]{BOM,ZWNBSP}
obj='{id:“4”,“username:”muzikant346”,“coins:”675”,“avata1:”1”,“avatar2:“0”,“avatar3:”0”,“avatar4:”0”,“avatar";log(JSON.parse(obj))
@AlwaysSNNY-如果您删除了该字符(如果是问题所在),则错误消息将是关于意外的标记
o
,而不是零宽度非中断空格。另一个参考:
JSON.parse(JSON.stringify({"id":"4","username":"muzikant346","coins":"675","avatar1":"1","avatar2":"0","avatar3":"0","avatar4":"0","avatar_selected":"0"}));