0.2.1 • Published 11 years ago
matt-fetch v0.2.1
window.fetch polyfill
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.
$ bower install fetchYou'll also need a Promise polyfill for older browsers.
$ bower install es6-promiseThis can be also be installed with npm.
$ npm install github/fetch --saveUsage
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 form fields
fetch('/query', {
method: 'post',
body: {
name: 'Hubot',
login: 'hubot'
}
})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 Promise.resolve(response)
} else {
return Promise.reject(response)
}
}
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(response) {
console.log('request failed with status', response.status)
})Browser Support
![]() | ![]() | ![]() | ![]() | ![]() |
|---|---|---|---|---|
| Latest ✔ | Latest ✔ | 10+ ✔ | Latest ✔ | 6.1+ ✔ |
0.2.1
11 years ago




