fetch-polyfill

WebJar for fetch-polyfill

License

License

MIT
GroupId

GroupId

org.webjars.npm
ArtifactId

ArtifactId

fetch-polyfill
Last Version

Last Version

0.8.2
Release Date

Release Date

Type

Type

jar
Description

Description

fetch-polyfill
WebJar for fetch-polyfill
Project URL

Project URL

http://webjars.org
Source Code Management

Source Code Management

https://github.com/undozen/fetch

Download fetch-polyfill

How to add to project

<!-- https://jarcasting.com/artifacts/org.webjars.npm/fetch-polyfill/ -->
<dependency>
    <groupId>org.webjars.npm</groupId>
    <artifactId>fetch-polyfill</artifactId>
    <version>0.8.2</version>
</dependency>
// https://jarcasting.com/artifacts/org.webjars.npm/fetch-polyfill/
implementation 'org.webjars.npm:fetch-polyfill:0.8.2'
// https://jarcasting.com/artifacts/org.webjars.npm/fetch-polyfill/
implementation ("org.webjars.npm:fetch-polyfill:0.8.2")
'org.webjars.npm:fetch-polyfill:jar:0.8.2'
<dependency org="org.webjars.npm" name="fetch-polyfill" rev="0.8.2">
  <artifact name="fetch-polyfill" type="jar" />
</dependency>
@Grapes(
@Grab(group='org.webjars.npm', module='fetch-polyfill', version='0.8.2')
)
libraryDependencies += "org.webjars.npm" % "fetch-polyfill" % "0.8.2"
[org.webjars.npm/fetch-polyfill "0.8.2"]

Dependencies

There are no dependencies for this project. It is a standalone project that does not depend on any other jars.

Project Modules

There are no modules declared in this project.

window.fetch polyfill

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

This module is out of maintanance, use fetch-ie8 instead. or you can try promisingagent if you want to use promise api for ajax and don't need ServiceWorker

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

Available on Bower as fetch-polyfill.

$ bower install fetch-polyfill

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

$ bower install es6-promise

This can also be installed with npm.

$ npm install fetch-polyfill --save

(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+

Versions

Version
0.8.2
0.8.1