fetch和$ .getjson之间的区别

时间:2017-04-04 08:07:31

标签: javascript jquery fetch-api

我一直在使用Google+ API并尝试使用此网址获取Google+用户的个人资料图片网址:

  

https://www.googleapis.com/plus/v1/people/ {USER_ID}?钥匙= {} API_KEY

不需要OAuth,您也可以在这里试一试(无需API密钥):

  

https://developers.google.com/apis-explorer/#p/plus/v1/plus.people.get?userId=116725099929439898086&_h=1&

起初我使用Fetch API来获取数据,因为我还想使用服务工作者来执行此操作:

fetch('https://www.googleapis.com/plus/v1/people/116725099929439898086?key=MY_API_KEY')
.then(function(response){
    console.log(response);
});

但它只给了我这个回应:

{
    body: ReadableStream
    bodyUsed: false
    headers: Headers
    ok: true
    status: 200
    statusText: ""
    type: "cors"
    url: "https://www.googleapis.com/plus/v1/people/115681458968227650592?key=MY_API_KEY"
}

但是,如果我使用jQuery的getJSON方法:

$.getJSON( "https://www.googleapis.com/plus/v1/people/115681458968227650592?key=MY_API_KEY", function( data ) {
    console.log(data);
}); 

它就像一个魅力,我可以得到我需要的东西:

{
 "kind": "plus#person",
 "etag": "\"FT7X6cYw9BSnPtIywEFNNGVVdio/DgskSQn7XXHCvjcdFBFkiqEbsfo\"",
 "gender": "male",
 "urls": [ ... ],
 "objectType": "person",
 "id": "116725099929439898086",
 "displayName": "Kevin Lai",
 ...
}

有人可以解释为什么他们会这样不同的行为吗?而且,如何在仍然使用Fetch API时解决问题,这样我仍然可以在服务工作者中执行此异步任务?

1 个答案:

答案 0 :(得分:1)

更改fetch()来电使用response.json()(请参阅MDN docs)以从响应正文中提取JSON。

fetch('https://www.googleapis.com/plus/v1/people/116725099929439898086?key=MY_API_KEY')
.then(function (response){
    return response.json();
})
.then(function (json){
    console.log(json);
});