themes/base: xhr.js: clean code style, implement XHR.get() and XHR.poll() convenience functions
This commit is contained in:
parent
2829139f35
commit
b2b3b181d8
1 changed files with 82 additions and 41 deletions
|
@ -7,10 +7,10 @@ XHR = function()
|
|||
{
|
||||
this.reinit = function()
|
||||
{
|
||||
if( window.XMLHttpRequest ) {
|
||||
if (window.XMLHttpRequest) {
|
||||
this._xmlHttp = new XMLHttpRequest();
|
||||
}
|
||||
else if( window.ActiveXObject ) {
|
||||
else if (window.ActiveXObject) {
|
||||
this._xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
|
||||
}
|
||||
else {
|
||||
|
@ -19,7 +19,10 @@ XHR = function()
|
|||
}
|
||||
|
||||
this.busy = function() {
|
||||
switch( this._xmlHttp.readyState )
|
||||
if (!this._xmlHttp)
|
||||
return false;
|
||||
|
||||
switch (this._xmlHttp.readyState)
|
||||
{
|
||||
case 1:
|
||||
case 2:
|
||||
|
@ -32,7 +35,7 @@ XHR = function()
|
|||
}
|
||||
|
||||
this.abort = function() {
|
||||
if( this.busy() )
|
||||
if (this.busy())
|
||||
this._xmlHttp.abort();
|
||||
}
|
||||
|
||||
|
@ -41,23 +44,23 @@ XHR = function()
|
|||
this.reinit();
|
||||
|
||||
var xhr = this._xmlHttp;
|
||||
var code = this._encode( data );
|
||||
var code = this._encode(data);
|
||||
|
||||
url = location.protocol + '//' + location.host + url;
|
||||
|
||||
if( code )
|
||||
if( url.substr(url.length-1,1) == '&' )
|
||||
if (code)
|
||||
if (url.substr(url.length-1,1) == '&')
|
||||
url += code;
|
||||
else
|
||||
url += '?' + code;
|
||||
|
||||
xhr.open( 'GET', url, true );
|
||||
xhr.open('GET', url, true);
|
||||
|
||||
xhr.onreadystatechange = function()
|
||||
{
|
||||
if( xhr.readyState == 4 ) {
|
||||
if (xhr.readyState == 4) {
|
||||
var json = null;
|
||||
if( xhr.getResponseHeader("Content-Type") == "application/json" ) {
|
||||
if (xhr.getResponseHeader("Content-Type") == "application/json") {
|
||||
try {
|
||||
json = eval('(' + xhr.responseText + ')');
|
||||
}
|
||||
|
@ -66,11 +69,11 @@ XHR = function()
|
|||
}
|
||||
}
|
||||
|
||||
callback( xhr, json );
|
||||
callback(xhr, json);
|
||||
}
|
||||
}
|
||||
|
||||
xhr.send( null );
|
||||
xhr.send(null);
|
||||
}
|
||||
|
||||
this.post = function(url,data,callback)
|
||||
|
@ -78,19 +81,19 @@ XHR = function()
|
|||
this.reinit();
|
||||
|
||||
var xhr = this._xmlHttp;
|
||||
var code = this._encode( data );
|
||||
var code = this._encode(data);
|
||||
|
||||
xhr.onreadystatechange = function()
|
||||
{
|
||||
if( xhr.readyState == 4 )
|
||||
callback( xhr );
|
||||
if (xhr.readyState == 4)
|
||||
callback(xhr);
|
||||
}
|
||||
|
||||
xhr.open( 'POST', url, true );
|
||||
xhr.setRequestHeader( 'Content-type', 'application/x-www-form-urlencoded' );
|
||||
xhr.setRequestHeader( 'Content-length', code.length );
|
||||
xhr.setRequestHeader( 'Connection', 'close' );
|
||||
xhr.send( code );
|
||||
xhr.open('POST', url, true);
|
||||
xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
|
||||
xhr.setRequestHeader('Content-length', code.length);
|
||||
xhr.setRequestHeader('Connection', 'close');
|
||||
xhr.send(code);
|
||||
}
|
||||
|
||||
this.cancel = function()
|
||||
|
@ -103,41 +106,41 @@ XHR = function()
|
|||
{
|
||||
var code = '';
|
||||
|
||||
for( var i = 0; i < form.elements.length; i++ )
|
||||
for (var i = 0; i < form.elements.length; i++)
|
||||
{
|
||||
var e = form.elements[i];
|
||||
|
||||
if( e.options )
|
||||
if (e.options)
|
||||
{
|
||||
code += ( code ? '&' : '' ) +
|
||||
code += (code ? '&' : '') +
|
||||
form.elements[i].name + '=' + encodeURIComponent(
|
||||
e.options[e.selectedIndex].value
|
||||
);
|
||||
}
|
||||
else if( e.length )
|
||||
else if (e.length)
|
||||
{
|
||||
for( var j = 0; j < e.length; j++ )
|
||||
if( e[j].name ) {
|
||||
code += ( code ? '&' : '' ) +
|
||||
e[j].name + '=' + encodeURIComponent( e[j].value );
|
||||
for (var j = 0; j < e.length; j++)
|
||||
if (e[j].name) {
|
||||
code += (code ? '&' : '') +
|
||||
e[j].name + '=' + encodeURIComponent(e[j].value);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
code += ( code ? '&' : '' ) +
|
||||
e.name + '=' + encodeURIComponent( e.value );
|
||||
code += (code ? '&' : '') +
|
||||
e.name + '=' + encodeURIComponent(e.value);
|
||||
}
|
||||
}
|
||||
|
||||
if( typeof extra_values == 'object' )
|
||||
for( var key in extra_values )
|
||||
code += ( code ? '&' : '' ) +
|
||||
key + '=' + encodeURIComponent( extra_values[key] );
|
||||
if (typeof extra_values == 'object')
|
||||
for (var key in extra_values)
|
||||
code += (code ? '&' : '') +
|
||||
key + '=' + encodeURIComponent(extra_values[key]);
|
||||
|
||||
return(
|
||||
( form.method == 'get' )
|
||||
? this.get( form.getAttribute('action'), code, callback )
|
||||
: this.post( form.getAttribute('action'), code, callback )
|
||||
(form.method == 'get')
|
||||
? this.get(form.getAttribute('action'), code, callback)
|
||||
: this.post(form.getAttribute('action'), code, callback)
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -146,14 +149,14 @@ XHR = function()
|
|||
obj = obj ? obj : { };
|
||||
obj['_'] = Math.random();
|
||||
|
||||
if( typeof obj == 'object' )
|
||||
if (typeof obj == 'object')
|
||||
{
|
||||
var code = '';
|
||||
var self = this;
|
||||
|
||||
for( var k in obj )
|
||||
code += ( code ? '&' : '' ) +
|
||||
k + '=' + encodeURIComponent( obj[k] );
|
||||
for (var k in obj)
|
||||
code += (code ? '&' : '') +
|
||||
k + '=' + encodeURIComponent(obj[k]);
|
||||
|
||||
return code;
|
||||
}
|
||||
|
@ -161,3 +164,41 @@ XHR = function()
|
|||
return obj;
|
||||
}
|
||||
}
|
||||
|
||||
XHR.get = function(url, data, callback)
|
||||
{
|
||||
(new XHR()).get(url, data, callback);
|
||||
}
|
||||
|
||||
XHR.poll = function(interval, url, data, callback)
|
||||
{
|
||||
if (isNaN(interval) || interval <= 1)
|
||||
interval = 5;
|
||||
|
||||
if (!XHR._q)
|
||||
{
|
||||
XHR._t = 0;
|
||||
XHR._q = [ ];
|
||||
}
|
||||
|
||||
XHR._q.push({
|
||||
interval: interval,
|
||||
callback: callback,
|
||||
url: url,
|
||||
data: data,
|
||||
xhr: new XHR()
|
||||
});
|
||||
|
||||
if (!XHR._i)
|
||||
{
|
||||
XHR._i = window.setInterval(function() {
|
||||
for (var i = 0, e = XHR._q[0]; i < XHR._q.length; e = XHR._q[++i])
|
||||
{
|
||||
if (!(XHR._t % e.interval) && !e.xhr.busy())
|
||||
e.xhr.get(e.url, e.data, e.callback);
|
||||
}
|
||||
|
||||
XHR._t++;
|
||||
}, 1000);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue