我最近一直在使用fetch API和Promises,而且我遇到了.json()。通常.json()返回与JSON.parse相同的输出。我用Google搜索了问题,结果指向了其他方向。
XHR和JSON.parse示例:
$('#xhr').click(function(){
var XHR = new XMLHttpRequest();
XHR.onreadystatechange = function(){
if (XHR.status == 200 && XHR.readyState == 4) {
$('#quote').text(JSON.parse(XHR.responseText)[0]);
}
};
XHR.open("GET", url);
XHR.send();
});
使用Fetch API的示例:
$('#fetch').click(function(){
fetch(url)
.then(function(res){
return res.json();
})
.then(function(quote){
$('#quote').text(quote);
})
.catch(function(err){
handleError(err);
});
});
有人可以解释这些看似相似的概念之间的区别吗? 谢谢
答案 0 :(得分:5)
Body.json()
是异步的,并返回一个解析为JavaScript对象的Promise
对象。 JSON.parse()
是同步的,可以解析字符串并更改生成的返回JavaScript对象。
答案 1 :(得分:1)
“ AJAX”与“回调”一起使用; “获取”与“承诺”一起使用。 使用JSON.parse()解析AJAX的响应。 使用json()解析获取的响应。
答案 2 :(得分:0)
在我看来,res.json和JSON.parse都具有相同的功能。由于语法的原因,首选使用res.json。 分享示例以更好地理解...
this.service.userFunction() //calling service
.then((res) => {
this.userdetails = JSON.parse(res._body); //use this
this.userdetails = res.json(); // or use this syntax any one
)}
.catch()
使用其中任何一个将提供完整的响应正文并了解其功能。
答案 3 :(得分:0)
Body mixin 的 json() 方法接受一个 Response 流并读取它完成。它返回一个承诺,该承诺将正文文本解析为 JSON 的结果进行解析。 JSON.parse() 方法解析 JSON 字符串,构造字符串描述的 JavaScript 值或对象。
使用 JSON.parse() 解析 AJAX 的响应。使用 json() 解析响应以进行 fetch。