You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

115 lines
2.4 KiB
JavaScript

/**
* @author Don Griffin
*
* Simulates an XMLHttpRequest object's methods and properties but is backed by a
* {@link Ext.ux.ajax.Simlet} instance that provides the data.
*/
Ext.define('Ext.ux.ajax.SimXhr', {
readyState: 0,
mgr: null,
simlet: null,
constructor: function (config) {
var me = this;
Ext.apply(me, config);
me.requestHeaders = {};
},
abort: function () {
var me = this;
if (me.timer) {
clearTimeout(me.timer);
me.timer = null;
}
me.aborted = true;
},
getAllResponseHeaders: function () {
var headers = [];
Ext.Object.each(this.responseHeaders, function (name, value) {
headers.push(name + ': ' + value);
});
return headers.join('\x0d\x0a');
},
getResponseHeader: function (header) {
var headers = this.responseHeaders;
return (headers && headers[header]) || null;
},
open: function (method, url, async, user, password) {
var me = this;
me.method = method;
me.url = url;
me.async = async !== false;
me.user = user;
me.password = password;
me.setReadyState(1);
},
overrideMimeType: function (mimeType) {
this.mimeType = mimeType;
},
schedule: function () {
var me = this;
me.timer = setTimeout(function () {
me.onTick();
}, me.mgr.delay);
},
send: function (body) {
var me = this;
me.body = body;
if (me.async) {
me.schedule();
} else {
me.onComplete();
}
},
setReadyState: function (state) {
var me = this;
if (me.readyState != state) {
me.readyState = state;
me.onreadystatechange();
}
},
setRequestHeader: function (header, value) {
this.requestHeaders[header] = value;
},
// handlers
onreadystatechange: Ext.emptyFn,
onComplete: function () {
var me = this,
callback;
me.readyState = 4;
Ext.apply(me, me.simlet.exec(me));
callback = me.jsonpCallback;
if (callback) {
var text = callback + '(' + me.responseText + ')';
eval(text);
}
},
onTick: function () {
var me = this;
me.timer = null;
me.onComplete();
me.onreadystatechange();
}
});