12345678910111213141516171819202122232425262728293031323334353637 |
- import Observer from './observer';
- /**
- * Perform an ajax request
- *
- * @param {Options} options Description
- *
- * @returns {Object} Observer instance
- */
- export default function ajax (options) {
- const instance = new Observer();
- const xhr = new XMLHttpRequest();
- let fired100 = false;
- xhr.open(options.method || 'GET', options.url, true);
- xhr.responseType = options.responseType || 'json';
- xhr.addEventListener('progress', e => {
- instance.fireEvent('progress', e);
- if (e.lengthComputable && e.loaded == e.total) {
- fired100 = true;
- }
- });
- xhr.addEventListener('load', e => {
- if (!fired100) {
- instance.fireEvent('progress', e);
- }
- instance.fireEvent('load', e);
- if (200 == xhr.status || 206 == xhr.status) {
- instance.fireEvent('success', xhr.response, e);
- } else {
- instance.fireEvent('error', e);
- }
- });
- xhr.addEventListener('error', e => instance.fireEvent('error', e));
- xhr.send();
- instance.xhr = xhr;
- return instance;
- }
|