About Fetch

关于

  fetch是获取请求的一种方法,会返回Promise,相对ajax,属于较底层api。

特点

  1. 默认不带cookie,可以设置,也可以设置其它请求头。
  2. fetch返回promise,当遇到网络错误时会被reject,对很多4xx、5xx不会报错,判断成功与否需要在resolve时增加对response.ok属性的判断。
  3. 对于xhr中的abort、progress,在fetch中有相应的控制器可处理(FetchController、AbortController),好像还没有正式成为规范。

语法

  • request

    1
    fetch( url[, options])
    • url,要获取资源的url
    • options,配置项对象,包含请求的设置
      • method:请求方法。默认GET。
      • headers:包含请求头设置的对象。
      • body:请求的body信息。
      • mode:请求的模式。如corsno-cors或者some-origin
      • credentials:请求的credentials。如omitsome-origin或者include,设置include时,在当前域请求时会带上cookie。
      • cache:请求的cache模式。如defaultno-storereloadno-cacheforce-cache或者only-if-cached
      • redirect:可用的redirect模式。如follow(自动重定向)、error(如果产生重定向会自动终止并抛出错误)或者manual(手动处理)
      • referrer:请求来源。如no-referrerclient或者一个URL。默认client。?
      • referrerPolicy:请求来源的策略。如no-referrerno-referrer-when-downgradeoriginorigin-when-cross-originunsafe-url。?
      • integrity:请求子资源的完整值。?
  • response

    1
    2
    3
    fetch( url).then( function(res){
    return res.json();
    })
    • 在请求的resolve时会得到一个Response对象
      • status:状态码。
      • ok:表示请求是否成功的布尔值。
      • res.blob()res.arrayBuffer()res.formData()res.json()res.text()这几个方法是读取Response并将它设置为已读(即只可读一次),并返回一个相应格式的promise对象。