xhr with ts
export class Header {
header: string;
data: string;
constructor(header: string, data: string) {
this.header = header;
this.data = data;
}
}
export class Data {
Headers: string;
Body: string;
Text: string;
Type: string;
Status: number;
StatusText: string;
}
function DataFromJSXHR(jsXHR: XMLHttpRequest): Data {
var data = new Data();
data.Headers = jsXHR.getAllResponseHeaders();
data.Body = jsXHR.response;
data.Text = jsXHR.responseText;
data.Type = jsXHR.responseType;
data.Status = jsXHR.status;
data.StatusText = jsXHR.statusText;
return data;
}
function serialize(obj: any) {
var str = [];
for (var p in obj)
if (obj.hasOwnProperty(p)) {
str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p]));
}
return str.join("&");
}
function SendCommand(method: string, url: string, headers: Array<Header>, data: string | Object = "", callback: Function) {
var jsXHR = new XMLHttpRequest();
jsXHR.open(method, url);
if (headers != null)
headers.forEach(header =>
jsXHR.setRequestHeader(header.header, header.data));
jsXHR.onload = (ev) => {
if (jsXHR.status < 200 || jsXHR.status >= 300) {
callback(true, DataFromJSXHR(jsXHR));
}
callback(null, DataFromJSXHR(jsXHR));
}
jsXHR.onerror = (ev) => {
callback('Error ' + method.toUpperCase() + 'ing data to url "' + url + '", check that it exists and is accessible');
};
if (typeof(data) !== 'string') {
data = serialize(data);
}
if (method !== 'GET') {
jsXHR.send(data);
} else {
jsXHR.send();
}
}
export function Get(url: string, headers: Array<Header>, callback: Function) {
SendCommand('GET', url, headers, '', callback);
}
export function Post(url: string, data: string | Object = "", headers: Array<Header>, callback: Function) {
SendCommand('POST', url, headers, data, callback);
}
export function Put(url: string, data: string | Object = "", headers: Array<Header>, callback: Function) {
SendCommand('Put', url, headers, data, callback);
}