为何response.json()返回字符串且浏览器不报错?
问题解答
代码示例
fetch('url.php', { method: "POST", headers: { "Content-Type": "application/x-www-form-urlencoded" }, body: "urls=" + encodeURIComponent( JSON.stringify(data) ) }).then(function(response) { response.json().then(function(response_as_json) { console.log(typeof response_as_json === 'string'); // returns true }) })
疑问解答
1. 为什么response.json()会返回字符串?
response.json()的作用是把服务器返回的JSON格式文本解析成对应的JavaScript值。如果服务器返回的JSON文本本身就是一个字符串(比如返回内容是"example string",外层双引号是JSON语法的一部分),解析后自然得到JavaScript字符串类型的值。
2. 既然返回的是字符串,浏览器为何不抛出错误?
单个字符串本身是合法的JSON格式。很多人误以为JSON只能是对象或数组,但实际上JSON规范允许的顶级值包括:字符串、数字、布尔值、null、数组、对象这几种类型。只要服务器返回的文本符合JSON语法规范,response.json()就会正常解析,不会抛出错误。
补充:JSON全称是JavaScript Object Notation,但这只是命名上的历史习惯,实际语法规范并不限制顶级值必须是对象。
内容的提问来源于stack exchange,提问作者Andrei
相关产品推荐
相关产品推荐

