HTML5 fetch polyfill from github wrapped and bundled for ember-cli users
ember install ember-fetch
import fetch from 'fetch';
import Ember from 'ember';
export default Ember.Route.extend({
model() {
return fetch('/my-cool-end-point.json').then(function(response) {
return response.json();
});
}
});
To have Ember Data utilize fetch
instead of jQuery.ajax to make calls to your backend, extend your project's application
adapter with the adapter-fetch
mixin.
// app/adapters/application.js
import DS from 'ember-data';
import AdapterFetch from 'ember-fetch/mixins/adapter-fetch';
export default DS.RESTAdapter.extend(AdapterFetch, {
...
});
Currently, Fastboot supplies its own server-side ajax functionality, and including ember-fetch
and the adapter-fetch
mixin in a Fastboot app will not work without some modifications. To allow the node-fetch
polyfill that is included with this addon to make your API calls, you must add an initializer to the consuming app's fastboot
directory that overrides the one Fastboot utilizes to inject its own ajax.
Example:
// fastboot/initializers/ajax.js
export default {
name: 'ajax-service',
initialize() {
// noop
// This is to override Fastboot's initializer which prevents ember-fetch from working
// https://github.com/ember-fastboot/ember-cli-fastboot/blob/master/fastboot/initializers/ajax.js
}
}
- evergreen / IE10+ / Safari 6.1+ https://github.com/github/fetch#browser-support
- ideally yes, but only if you cater to IE9+
- for basic drop-in compat
import ajax from 'ember-fetch/ajax'
- taken care of for you
- original emits a global
- original requires a Promise polyfill (ember users have RSVP)
- original isn't Ember run-loop aware
- we actually don't bundle github/fetch rather we merely wrap/transform what
comes from
node_modules
, so we should be resilient to changes assuming semver from the fetch module