wavesurfer.js
Version:
Interactive navigable audio visualization using Web Audio and Canvas
52 lines (48 loc) • 1.48 kB
JavaScript
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';
if (options.xhr) {
if (options.xhr.requestHeaders) {
// add custom request headers
options.xhr.requestHeaders.forEach(header => {
xhr.setRequestHeader(header.key, header.value);
});
}
if (options.xhr.withCredentials) {
// use credentials
xhr.withCredentials = true;
}
}
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;
}