所以这是我的文字:
handleMyKeys(res) {
// console.log(res);
console.log("text" + this.responseText); //line 12
let json = JSON.parse(this.responseText);
console.log("Output is" + json.keys); //line 14
console.log(window.mykeys);
if (json.keys) {
window.mykeys.setState({keys: json.keys});
}
}
它为json.keys打印出undefined。
但是,当我在控制台中运行相同的操作时,我获得了一个带有.keys属性的有效JSON对象。为什么呢?
"{\"keys\":[\"itchio\",\"quantumitch\"]}" MyKeys.js:12
Output isundefined MyKeys.js:14
Object { props: Object, context: Object, refs: Object, updater: Object, _reactInternalFiber: Object, _reactInternalInstance: Object, state: Object } MyKeys.js:15
x = "{\"keys\":[\"itchio\",\"quantumitch\"]}";
"{"keys":["itchio","quantumitch"]}"
JSON.parse("{\"keys\":[\"itchio\",\"quantumitch\"]}");
Object { keys: Array[2] }
y = JSON.parse("{\"keys\":[\"itchio\",\"quantumitch\"]}")
Object { keys: Array[2] }
y.keys
Array [ "itchio", "quantumitch" ]
答案 0 :(得分:1)
根据您的控制台输出,您的输入看起来已被编码两次。
比较以下两个语句的控制台输出:
console.log("{\"keys\":[\"itchio\",\"quantumitch\"]}");
console.log("\"{\\\"keys\\\":[\\\"itchio\\\",\\\"quantumitch\\\"]}\"");

第二个命令的输出对应于您在控制台中看到的内容,表示您正在处理的字符串已转义两次。
检查您收到的回复内容,或执行typeof JSON.parse(this.responseText)
验证。
答案 1 :(得分:0)
可能您必须写res
或res.responseText
而不是this.responseText
。 (取决于res
是什么。)