提交 b2b3b181 编写于 作者: J Jo-Philipp Wich

themes/base: xhr.js: clean code style, implement XHR.get() and XHR.poll() convenience functions

上级 2829139f
......@@ -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);
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册