Fetch API

作者: Qiner_176 | 来源:发表于2018-10-08 10:46 被阅读0次

前几天阿里面试被问到新一代ajax如何跨域 想了想面试官应该问的就是fetch吧 现在来总结一下再次帮助自己理解哈~

Fetch API 提供了一个获取资源的接口(包括跨域)。Fetch 提供了对 Request 和 Response (以及其他与网络请求有关的)对象的通用定义。使之今后可以被使用到更多地应用场景中:无论是service workers、Cache API、又或者是其他处理请求和响应的方式,甚至是任何一种需要你自己在程序中生成响应的方式。它还提供了一种定义,将 CORS 和 HTTP 原生的头信息结合起来,取代了原来那种分离的定义。

fetch()必须接受一个参数——资源的路径。无论请求成功与否,它都返回一个 promise 对象,resolve 对应请求的Response。一旦 Response 被返回,就有一些方法可以使用了,比如定义内容或者处理方法。

此外,Fetch也可以被终止,有相应的Abort API,但是还处于实验中。

Fetch提供了4个接口,分别为fetch()  headers request  response.

最基本的fetch请求如下所示:

fetch('http://example.com/movies.json').then(function(response{

    return response.json();

}).then(function(myJson){

    console.log(JSON.stringify(myJson));

});

fetch()请求的第一个参数为一个URL,第二个参数可选。第二个参数为一个配置对象,可配置项有:

method:"POST",// *GET, POST, PUT, DELETE, etc.

mode:"cors",// no-cors, cors, *same-origin

cache:"no-cache",// *default, no-cache, reload, force-cache, only-if-cached

credentials:"same-origin",// include, same-origin, *omit

headers:{

    "Content-Type":"application/json; charset=utf-8",

    // "Content-Type": "application/x-www-form-urlencoded",

    },

redirect:"follow",      // manual, *follow, error

referrer:"no-referrer",    // no-referrer, *client

body:JSON.stringify(data),    // body的数据类型必须和 "Content-Type" header里声明的一样

}

使用fetch()去发一个包含json数据的post请求:

let url = 'https://example.com/profile';

let data = {username:'example'};

fetch(url,{

    method:'POST',        // 或者'PUT'

    body:JSON.stringify(data),    // data 可以是string或者object类型

    headers:{

        'ContentType':'application/json'

    }    

}).then(res => res.json())

.then(response => console.log('Success:',JSON.stringify(response)))

.catch(error => console.error('Error:',error));

在发出get/post请求时,我的理解为要么可以在第二个参数直接传入一对象{//要传的数据},要么就在第二个参数中配置headers的ContentType 再在body里传入数据。

在不支持fetch的浏览器中要想使用fetch,Fetch  Polyfill可供使用,引入Polyfill即可。

以上为简单的fetch请求总结。

相关文章

网友评论

      本文标题:Fetch API

      本文链接:https://www.haomeiwen.com/subject/qcydaftx.html