1. fetch-ie8
**This fork supports IE8 with es5-shim, es5-sham and es6-promise.**
fetch-ie8
Package: fetch-ie8
Created by: camsong
Last modified: Sat, 18 Jun 2022 00:15:27 GMT
Version: 1.5.0
License: MIT
Downloads: 30,780
Repository: https://github.com/camsong/fetch

Install

npm install fetch-ie8
yarn add fetch-ie8

window.fetch polyfill

This fork supports IE8 with es5-shim, es5-sham and es6-promise.

If you also use JSONP, checkout fetch-jsonp.

Fetch API is still very new and not fully supported in some browsers, so you may
need to check browser verson as well as if window.fetch exists. In this case,
you can set window.__disableNativeFetch = true to use AJAX polyfill always.

The global fetch function is an easier way to make web requests and handle
responses than using an XMLHttpRequest. This polyfill is written as closely as
possible to the standard Fetch specification at https://fetch.spec.whatwg.org.

Installation

 $ npm install fetch-ie8 --save

You'll also need a Promise polyfill for older browsers.

 $ npm install es6-promise

Run this to polyfill the global environment at the beginning of your application.

 require('es6-promise').polyfill();

(For a node.js implementation, try node-fetch)

Usage

The fetch function supports any HTTP method. We'll focus on GET and POST
example requests.

HTML

 fetch('/users.html')
  .then(function(response) {
    return response.text()
  }).then(function(body) {
    document.body.innerHTML = body
  })

JSON

 fetch('/users.json')
  .then(function(response) {
    return response.json()
  }).then(function(json) {
    console.log('parsed json', json)
  }).catch(function(ex) {
    console.log('parsing failed', ex)
  })

Response metadata

 fetch('/users.json').then(function(response) {
  console.log(response.headers.get('Content-Type'))
  console.log(response.headers.get('Date'))
  console.log(response.status)
  console.log(response.statusText)
})

Post form

 var form = document.querySelector('form')

fetch('/query', {
  method: 'post',
  body: new FormData(form)
})

Post JSON

 fetch('/users', {
  method: 'post',
  headers: {
    'Accept': 'application/json',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    name: 'Hubot',
    login: 'hubot',
  })
})

File upload

 var input = document.querySelector('input[type="file"]')

var form = new FormData()
form.append('file', input.files[0])
form.append('user', 'hubot')

fetch('/avatars', {
  method: 'post',
  body: form
})

Success and error handlers

This causes fetch to behave like jQuery's $.ajax by rejecting the Promise
on HTTP failure status codes like 404, 500, etc. The response Promise is
resolved only on successful, 200 level, status codes.

 function status(response) {
  if (response.status >= 200 && response.status < 300) {
    return response
  }
  throw new Error(response.statusText)
}

function json(response) {
  return response.json()
}

fetch('/users')
  .then(status)
  .then(json)
  .then(function(json) {
    console.log('request succeeded with json response', json)
  }).catch(function(error) {
    console.log('request failed', error)
  })

Response URL caveat

The Response object has a URL attribute for the final responded resource.
Usually this is the same as the Request url, but in the case of a redirect,
its all transparent. Newer versions of XHR include a responseURL attribute
that returns this value. But not every browser supports this. The compromise
requires setting a special server side header to tell the browser what URL it
just requested (yeah, I know browsers).

 response.headers['X-Request-URL'] = request.url

If you want response.url to be reliable, you'll want to set this header. The
day that you ditch this polyfill and use native fetch only, you can remove the
header hack.

Browser Support

Chrome Firefox IE Opera Safari
Latest ✔ Latest ✔ 8+ ✔ Latest ✔ 6.1+ ✔

RELATED POST

Enhancing Vue.js Development: Harnessing the Potential of Vue-Loader

Enhancing Vue.js Development: Harnessing the Potential of Vue-Loader

Simplify Data Validation in Vue.js: A Step-by-Step Guide to Using Regex

Simplify Data Validation in Vue.js: A Step-by-Step Guide to Using Regex

Troubleshooting Made Easy: Common Issues and Solutions with vue-loader Without vue-cli

Troubleshooting Made Easy: Common Issues and Solutions with vue-loader Without vue-cli

Optimizing Webpack 4 with Vue CLI 3: Disabling the Cache-Loader

Optimizing Webpack 4 with Vue CLI 3: Disabling the Cache-Loader

Step-by-Step Guide: How to Add a Function to Your Vuex Plugin

Step-by-Step Guide: How to Add a Function to Your Vuex Plugin