Login   Register  
PHP Classes
elePHPant
Icontem

File: javascript.js

Recommend this page to a friend!
Stumble It! Stumble It! Bookmark in del.icio.us Bookmark in del.icio.us
  Classes of Kristo Vaher  >  Smart AJAX Controller  >  javascript.js  >  Download  
File: javascript.js
Role: Auxiliary data
Content type: text/plain
Description: JavaScript Front-End controller, utilizing custom uiAction() function.
Class: Smart AJAX Controller
Generate AJAX request responses in JSON format
Author: By
Last change:
Date: 4 years ago
Size: 3,583 bytes
 

Contents

Class file image Download
//Front-end javascript controller
//LGPL - http://www.gnu.org/licenses/lgpl-3.0.txt
//Kristo Vaher - kristo@waher.net

//Backend engine
var ajaxEngine='ajax.php';

//Used for convenient internal variables
var system=new Object();

//If you ever set systemLock to true, then this prevents user interface actions from taking place
system.systemLock=false;

$(document).ready(function(){
	//You can bind events and whatnot here as you would in any other case. 
	//This here is a placeholder for your convenience.
});

//This is front-end input controller. Data can be whatever you want, 
//you can use it in different context depending on action.
function uiAction(action,data){
	//input is an object used to be sent to AJAX backend.
	var input=new Object();
	if(system.systemLock==false){
		switch(action){
			
			//This shows how to use simple uiAction without using AJAX
			case 'alertString':
				alert('Your string: '+data);
			break;
			
			//This is an example function, it takes a value and has PHP backend lowercase it before alerting it
			//to the user.
			case 'alertLowercaseString':
				//You do not have to use input object here, but you do need to provide an array or another object
				//to be sent to executeAjaxAction();
				input['string']=data;
				executeAjaxAction(action,input);
			break;
			
			default:
				alert('UI ERROR: This action ['+action+'] does not exist in user interface!');
		}
	}
}

//This should not be modified, it is standardized function for sending data to backend
//and retreiving the JSON string before forwarding it to frontend callback
function executeAjaxAction(action, rawdata){
	//data is an array or an object serialized for use in a URL
	data=$.param(rawdata);
	//Lock is used to prevent action spamming
	//If you don't want to lock AJAX actions, then comment this out or at least display an error
	if(system['lock_'+action]!=1){
		system['lock_'+action]=1;
		$.ajax({
			type: 'POST',
			url: ajaxEngine,
			dataType: 'json',
			cache: false,
			async: true,
			data: ({action : action, data : data}),
			success: function(json){
				//If successful the JSON returned from backend is forwarded to be parsed by frontend actions
				parseAjaxReturn(json);
				system['lock_'+action]=0;
			},
			error: function(obj,msg,detailedmsg){
				//In case there was any unexpected error in the backend (PHP errors and whatnot), alert everything
				alert('ENGINE ERROR: '+msg+' ('+detailedmsg+')');
				system['lock_'+action]=0;
			}
		});
	} else {
		//You can comment this alert out
		alert('ENGINE ERROR: This action is already in progress');
	}
}

//This function takes the AJAX returned JSON and executes actions depending on the type
//You can call new user interface actions from here as well
function parseAjaxReturn(json){
	//If backend defines an error and a message for the error, alert this
	if(json['error']==1){
		alert('ERROR: '+json['message']);
	} else {
		switch(json['action']){
			
			//Example action for alert should backend decide to call for an alert
			case 'alert':
				alert(json['message']);
			break;
			
			//Simple refresh callback from backend
			case 'refresh':
				document.location.href=document.location.href;
			break;
			
			//Backend should always define action to be 'none' if no callback is defined
			case 'none':
			break;
			
			//In case no action was defined, alert an error
			default:
				alert('UI ERROR: Callback action ['+json['action']+'] does not exist in user interface!');
		}
	}
}