jswh
1/7/2017 - 7:08 PM

xhr with ts

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);
}