/// <reference path="ITransport.ts" />
/// <reference path="../Request.ts" />
/// <reference path="../Response.ts" />
var econda;
(function (econda) {
var ajax;
(function (ajax) {
var transport;
(function (transport) {
var Response = econda.ajax.Response;
/**
* Implements get transport for requests
* @class econda.ajax.transport.Get
*/
var Get = (function () {
function Get() {
/**
* @property {Boolean} _initialized
* @private
*/
this._initialized = false;
this._allHeaders = {};
}
/**
* @method setRequest
* Set request object
*/
Get.prototype.setRequest = function (request) {
this._request = request;
};
/**
* @method getRequest
* Get request object
*/
Get.prototype.getRequest = function () {
return this._request;
};
/**
* True if request can be send
* @returns {Boolean}
*/
Get.prototype.isSupportedRequest = function () {
return true;
};
Get.prototype.hasHeaders = function () {
if (Object.keys) {
return (Object.keys(this._allHeaders).length > 0);
}
else {
var keys = [], k;
for (k in this._allHeaders) {
if (Object.prototype.hasOwnProperty.call(this._allHeaders, k)) {
keys.push(k);
}
}
return keys.length > 0;
}
};
/**
* Send request
*/
Get.prototype.init = function () {
var cmp = this;
this._xhr = this.createXmlHttpRequestInstance();
this._xhr.onreadystatechange = function () {
cmp.onReadyStateChange.apply(cmp, arguments);
};
this._xhr.open("GET", this.getRequestUriWithParams(), true);
this.appendHeaders();
this._initialized = true;
};
* Add headers from request and writer to XMLHttpRequest object.
* @private
*/
Get.prototype.appendHeaders = function () {
var headers = {
"Content-Type": "text/plain"
};
if (this._request.isXDomainRequest() == false) {
// only for local requests, it would cause x-domain requests to be "not so simple requests"
// and so this would cause a prefly options request
headers["X-Requested-With"] = "XMLHttpRequest";
}
// add headers from request object
var headersFromRequest = this._request.getHeaders();
if (headersFromRequest) {
for (var name in headersFromRequest) {
headers[name] = headersFromRequest[name];
}
}
this._allHeaders = headers;
// append to xhr object (not possible on XDomainRequest objects, <= IE10)
if (typeof this._xhr.setRequestHeader != 'undefined') {
for (var name in headers) {
this._xhr.setRequestHeader(name, headers[name]);
}
}
return this;
};
/**
* Send request
* @param {econda.ajax.Request} request
*/
Get.prototype.send = function (request) {
var cmp = this;
if (typeof request != 'undefined') {
this.setRequest(request);
}
if (!this._initialized) {
this.init();
}
setTimeout(function () {
cmp._xhr.send();
}, 20);
};
/**
* Create and return instance of XmlHttpRequest object for all browsers.
* @private
* @returns {XMLHttpRequest}
*/
Get.prototype.createXmlHttpRequestInstance = function () {
var xhr = null;
if (typeof XMLHttpRequest != 'undefined') {
xhr = new XMLHttpRequest();
}
else {
xhr = new ActiveXObject('Microsoft.XMLHTTP');
}
return xhr;
};
/**
* Get uri from request object with parameters appended
* @param {String} url
* @param {Object} params
* @returns {String} request uri incl. parameters
* @private
*/
Get.prototype.getRequestUriWithParams = function () {
var uri = this._request.getUri();
var params = this._request.getParams();
return uri.clone().appendParams(params).toString();
};
/**
* Callback for xhr onreadystatechange. Must inform the request when it's done.
* @private
*/
Get.prototype.onReadyStateChange = function () {
var xhr = this._xhr; // XmlHttpRequest
var request = this._request; // econda.ajax.IRequest
if (xhr.readyState == 4) {
var result = new Response();
result.responseText = xhr.responseText;
result.status = xhr.status;
result.isError = (xhr.status != 200);
request.handleResponse(result);
}
};
return Get;
}());
transport.Get = Get; // end of class
})(transport = ajax.transport || (ajax.transport = {}));
})(ajax = econda.ajax || (econda.ajax = {}));
})(econda || (econda = {})); // end of module