Skip to content

Instantly share code, notes, and snippets.

@macromaniac
Last active November 3, 2019 23:19
Show Gist options
  • Star 8 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save macromaniac/e62ed27781842b6c8611 to your computer and use it in GitHub Desktop.
Save macromaniac/e62ed27781842b6c8611 to your computer and use it in GitHub Desktop.
simple typescript xhr using promises
module XHR {
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.responseBody;
data.Text = jsXHR.responseText;
data.Type = jsXHR.responseType;
data.Status = jsXHR.status;
data.StatusText = jsXHR.statusText;
return data;
}
function SendCommand(
method: string,
url: string,
headers: Array<Header>,
data: string = ""): Q.Promise<Data> {
var defer = Q.defer<Data>();
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) {
defer.reject(DataFromJSXHR(jsXHR));
}
defer.resolve(DataFromJSXHR(jsXHR));
}
jsXHR.onerror = (ev) => {
defer.reject('Error ' + method.toUpperCase() + 'ing data to url "' + url + '", check that it exists and is accessible');
};
if (method == 'POST')
jsXHR.send(data);
else
jsXHR.send();
return defer.promise;
}
export function Get(
url: string,
headers: Array<Header> = null): Q.Promise<Data> {
return SendCommand('GET', url, headers);
}
export function Post(
url: string,
data:string="",
headers: Array<Header> = null): Q.Promise<Data> {
return SendCommand('POST', url, headers, data);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment