JSON.parse()与。上传.json()

时间:2018-01-17 07:09:01

标签: javascript json fetch

我最近一直在使用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);
  });
});

有人可以解释这些看似相似的概念之间的区别吗? 谢谢

4 个答案:

答案 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。