src/OpenSheetMusicDisplay/AJAX.ts
/**
* Class with helper methods to handle asynchronous JavaScript requests
*/
export class AJAX {
/**
* Retrieve the content of the file at url
* @param url
* @returns {any}
*/
public static ajax(url: string, timeout: number = 9000): Promise<string> {
let xhttp: XMLHttpRequest;
const mimeType: string = url.indexOf(".mxl") > -1 ? "text/plain; charset=x-user-defined" : "application/xml";
if (XMLHttpRequest) {
xhttp = new XMLHttpRequest();
} else if (ActiveXObject) {
// for IE<7
xhttp = new ActiveXObject("Microsoft.XMLHTTP");
} else {
return Promise.reject(new Error("XMLHttp not supported."));
}
xhttp.timeout = timeout;
return new Promise((resolve: (value: string) => void, reject: (error: any) => void) => {
xhttp.onreadystatechange = (): void => {
if (xhttp.readyState === XMLHttpRequest.DONE) {
if (xhttp.status === 200) {
resolve(xhttp.responseText);
} else if (xhttp.status === 0 && xhttp.responseText) {
resolve(xhttp.responseText);
} else {
//reject(new Error("AJAX error: '" + xhttp.statusText + "'"));
reject(new Error("Could not retrieve requested URL " + xhttp.status));
}
}
};
xhttp.ontimeout = (e): void => {
// For IE and node
reject(new Error("Server request Timeout"));
};
xhttp.overrideMimeType(mimeType);
xhttp.open("GET", url, true);
xhttp.send();
});
}
}