This repository has been archived on 2019-05-14. You can view files and clone it, but cannot push or open issues or pull requests.
Typertext/lib/Typertext/Transport/XDR.ts

53 lines
1.9 KiB
TypeScript

module Typertext.Transport {
import HttpMethod = Typertext.Http.HttpMethod;
import HttpUrl = Typertext.Http.HttpUrl;
import HttpPostData = Typertext.Http.HttpPostData;
import HttpResponseHandler = Typertext.Http.HttpResponseHandler;
import HttpResponseStatus = Typertext.Http.HttpResponseStatus;
import HttpResponse = Typertext.Http.HttpResponse;
export class XDR extends GenericTransport {
constructor(method:HttpMethod, request:HttpUrl, postData:HttpPostData = {}, callback:HttpResponseHandler = (c)=> null) {
super(method, request, postData, callback);
//Create a XDR
var xdr = new XDomainRequest();
//and an interface to get the content type of the response
var getHeader = (name:string):string => {
if (name.toLowerCase() === "content-type") {
return xdr.contentType;
}
return undefined;
};
//No handle timeouts,
xdr.ontimeout = () => {
callback(new HttpResponse(HttpResponseStatus.timeout, (i:string)=>"", -1, ""));
};
//all errors (because XDR sucks)
xdr.onerror = () => {
callback(new HttpResponse(HttpResponseStatus.unknownError, getHeader, -1, xdr.responseText));
};
//and success.
xdr.onload = () => {
callback(new HttpResponse(HttpResponseStatus.success, getHeader, 200, xdr.responseText));
};
//Finally, open the request
xdr.open(HttpMethod[method], request.ToString());
//and either send
if (method == HttpMethod.GET) {
//a get request without data,
xdr.send();
return;
}
//or send the post-data to the server (as text/plain, because XDR sucks)
xdr.send(HttpUrl.UrlEncodeObject(postData));
}
}
}