Revision: 41243
Initial Code
Initial URL
Initial Description
Initial Title
Initial Tags
Initial Language
at February 14, 2011 22:38 by freelancephp
Initial Code
/*! * SimpleAJAX * * Simple ajax object for creating ajax calls. * * Why use SimpleAjax? * - Very small, only 2kb minified * - Make a asynchrone or synchrone ajax call ( AJAX / SJAX ) * - Use quick methods get() and post() for GET and POST calls * - Use load() method for loading html content and set to given element * - Set general settings that will be used by default for every ajax call * * @version 0.1 * @author Victor Villaverde Laan * @link http://www.freelancephp.net/simpleajax-small-ajax-javascript-object/ * @license MIT license */ var SimpleAJAX = Ajax = { xhr: null, // {XMLHttpRequest|ActiveXObject} /** * Default ajax settings */ settings: { url: '', type: 'GET', async: true, cache: true, data: null, contentType: 'application/x-www-form-urlencoded', success: null, error: null, complete: null }, /** * Ajax call * @param {object} options Optional, overwrite the default settings, see ajaxSettings * @return {this} For chaining */ call: function( options ) { var self = this, xhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject( 'Microsoft.XMLHTTP' ), opts = (function ( s, o ) { var opts = {}; for ( var key in s ) opts[ key ] = ( typeof o[ key ] == 'undefined' ) ? s[ key ] : o[ key ]; return opts; })( this.settings, options ), ready = function () { if( xhr.readyState == 4 ){ if ( xhr.status == 200 ) { if ( self.isFunction( opts.success ) ) opts.success.call( opts, xhr.responseText, xhr.status, xhr ); } else { if ( self.isFunction( opts.error ) ) opts.error.call( opts, xhr, xhr.status ); } if ( self.isFunction( opts.complete ) ) opts.complete.call( opts, xhr, xhr.status ); } }; this.xhr = xhr; // prepare options if ( ! opts.cache ) opts.url += (( opts.url.indexOf( '?' ) > -1 ) ? '&' : '?' ) + '_nocache='+ ( new Date() ).getTime(); if ( opts.data ) { if ( opts.type == 'GET' ) { opts.url += (( opts.url.indexOf( '?' ) > -1 ) ? '&' : '?' ) + this.param( opts.data ); opts.data = null; } else { opts.data = this.param( opts.data ); } } // set request xhr.open( opts.type, opts.url, opts.async ); xhr.setRequestHeader( 'Content-type', opts.contentType ); if ( opts.async ) { xhr.onreadystatechange = ready; xhr.send( opts.data ); } else { xhr.send( opts.data ); ready(); } return this; }, /** * Ajax GET request * @param {string} url * @param {string|object} data Containing GET values * @param {function} success Callback when request was succesfull * @return {this} For chaining */ get: function( url, data, success ) { if ( this.isFunction( data ) ) { success = data; data = null; } return this.call({ url: url, type: 'GET', data: data, success: success }); }, /** * Ajax POST request * @param {string} url * @param {string|object} data Containing post values * @param {function} success Callback when request was succesfull * @return {this} For chaining */ post: function ( url, data, success ) { if ( this.isFunction( data ) ) { success = data; data = null; } return this.call({ url: url, type: 'POST', data: data, success: success }); }, /** * Set content loaded by an ajax call * @param {DOM node|string} el Can contain an element or the id of the element * @param {string} url The url of the ajax call ( include GET vars in querystring ) * @param {string} data Optional, the POST data, when set method will be set to POST * @param {function} complete ptional, callback when loading is completed * @return {this} For chaining */ load: function ( el, url, data, complete ) { if ( typeof el == 'string' ) el = document.getElementById( el ); this.call({ url: url, type: data ? 'POST' : 'GET', data: data || null, complete: complete || null, success: function ( html ) { try { el.innerHTML = html; } catch( e ) { var ph = document.createElement( 'div' ); ph.innerHTML = html; // empty element content while ( el.firstChild ) el.removeChild( el.firstChild ); // set new html content for( var x = 0, max = ph.childNodes.length; x < max; x++ ) el.appendChild( ph.childNodes[ x ] ); } } }); return this; }, /** * Make querystring outof object or array of values * @param {object|array} o Keys/values * @return {string} The querystring */ param: function ( o ) { var s = []; for ( var key in o ){ s.push( encodeURIComponent( key ) +'='+ encodeURIComponent( o[ key ] ) ); } return s.join( '&' ); }, /** * Check if argument is function * @param {mixed} o * @return {boolean} */ isFunction: function ( o ) { return ( o && o.constructor && o.constructor.toString().indexOf( 'Function' ) !== -1 ); } };
Initial URL
http://www.freelancephp.net/simpleajax-small-ajax-javascript-object/
Initial Description
Simple ajax object for creating ajax calls. Why use SimpleAjax? - Very small, only 2kb minified - Make a asynchrone or synchrone ajax call ( AJAX / SJAX ) - Use quick methods get() and post() for GET and POST calls - Use load() method for loading html content and set to given element - Set general settings that will be used by default for every ajax call
Initial Title
SimpleAjax Object
Initial Tags
ajax, js, object
Initial Language
JavaScript