2010-10-11 22:52:24 +00:00
|
|
|
/*
|
|
|
|
* xhr.js - XMLHttpRequest helper class
|
|
|
|
* (c) 2008-2010 Jo-Philipp Wich
|
|
|
|
*/
|
|
|
|
|
|
|
|
XHR = function()
|
|
|
|
{
|
|
|
|
this.reinit = function()
|
|
|
|
{
|
|
|
|
if( window.XMLHttpRequest ) {
|
|
|
|
this._xmlHttp = new XMLHttpRequest();
|
|
|
|
}
|
|
|
|
else if( window.ActiveXObject ) {
|
|
|
|
this._xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
alert("xhr.js: XMLHttpRequest is not supported by this browser!");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
this.busy = function() {
|
|
|
|
switch( this._xmlHttp.readyState )
|
|
|
|
{
|
|
|
|
case 1:
|
|
|
|
case 2:
|
|
|
|
case 3:
|
|
|
|
return true;
|
|
|
|
|
|
|
|
default:
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
this.abort = function() {
|
|
|
|
if( this.busy() )
|
|
|
|
this._xmlHttp.abort();
|
|
|
|
}
|
|
|
|
|
|
|
|
this.get = function(url,data,callback)
|
|
|
|
{
|
|
|
|
this.reinit();
|
|
|
|
|
|
|
|
var xhr = this._xmlHttp;
|
|
|
|
var code = this._encode( data );
|
|
|
|
|
2010-11-18 10:23:23 +00:00
|
|
|
url = location.protocol + '//' + location.hostname +
|
2010-10-11 22:52:24 +00:00
|
|
|
( location.port ? ':' + location.port : '' ) + url;
|
|
|
|
|
|
|
|
if( code )
|
|
|
|
if( url.substr(url.length-1,1) == '&' )
|
|
|
|
url += code;
|
|
|
|
else
|
|
|
|
url += '?' + code;
|
|
|
|
|
|
|
|
xhr.open( 'GET', url, true );
|
|
|
|
|
|
|
|
xhr.onreadystatechange = function()
|
|
|
|
{
|
2010-11-18 07:21:14 +00:00
|
|
|
if( xhr.readyState == 4 ) {
|
|
|
|
var json = null;
|
|
|
|
if( xhr.getResponseHeader("Content-Type") == "application/json" ) {
|
|
|
|
try {
|
|
|
|
json = eval('(' + xhr.responseText + ')');
|
|
|
|
}
|
|
|
|
catch(e) {
|
|
|
|
json = null;
|
|
|
|
}
|
2010-11-15 14:40:28 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
callback( xhr, json );
|
2010-10-11 22:52:24 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
xhr.send( null );
|
|
|
|
}
|
|
|
|
|
|
|
|
this.post = function(url,data,callback)
|
|
|
|
{
|
|
|
|
this.reinit();
|
|
|
|
|
|
|
|
var xhr = this._xmlHttp;
|
|
|
|
var code = this._encode( data );
|
|
|
|
|
|
|
|
xhr.onreadystatechange = function()
|
|
|
|
{
|
|
|
|
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 );
|
|
|
|
}
|
|
|
|
|
|
|
|
this.cancel = function()
|
|
|
|
{
|
|
|
|
this._xmlHttp.onreadystatechange = function(){};
|
|
|
|
this._xmlHttp.abort();
|
|
|
|
}
|
|
|
|
|
|
|
|
this.send_form = function(form,callback,extra_values)
|
|
|
|
{
|
|
|
|
var code = '';
|
|
|
|
|
|
|
|
for( var i = 0; i < form.elements.length; i++ )
|
|
|
|
{
|
|
|
|
var e = form.elements[i];
|
|
|
|
|
|
|
|
if( e.options )
|
|
|
|
{
|
|
|
|
code += ( code ? '&' : '' ) +
|
|
|
|
form.elements[i].name + '=' + encodeURIComponent(
|
|
|
|
e.options[e.selectedIndex].value
|
|
|
|
);
|
|
|
|
}
|
|
|
|
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 );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
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] );
|
|
|
|
|
|
|
|
return(
|
|
|
|
( form.method == 'get' )
|
|
|
|
? this.get( form.getAttribute('action'), code, callback )
|
|
|
|
: this.post( form.getAttribute('action'), code, callback )
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
this._encode = function(obj)
|
|
|
|
{
|
2010-11-18 07:21:14 +00:00
|
|
|
obj = obj ? obj : { };
|
|
|
|
obj['_'] = Math.random();
|
|
|
|
|
2010-10-11 22:52:24 +00:00
|
|
|
if( typeof obj == 'object' )
|
|
|
|
{
|
|
|
|
var code = '';
|
|
|
|
var self = this;
|
|
|
|
|
|
|
|
for( var k in obj )
|
|
|
|
code += ( code ? '&' : '' ) +
|
|
|
|
k + '=' + encodeURIComponent( obj[k] );
|
2010-11-18 07:21:14 +00:00
|
|
|
|
2010-10-11 22:52:24 +00:00
|
|
|
return code;
|
|
|
|
}
|
|
|
|
|
|
|
|
return obj;
|
|
|
|
}
|
|
|
|
}
|