php code
<?php
// input and output keys
define('XUI_KEYWORD_CALLBACK', "callback");
define('XUI_KEYWORD_DATA', "data");
define('XUI_KEYWORD_ERROR', "error");
// for json
if(!function_exists('json_encode')){
include_once("JSON.php");
function json_encode($var){
return (new JSON).encode($var);
}
function json_decode($str){
return (new JSON).decode($str);
}
}
// handle request data
function xui_getRequestData(){
$callback = XUI_KEYWORD_CALLBACK;
$inputData=new stdClass;
// 1. for "post" request
// 1.1. form post( a=b$c=d )
if(count($_POST)>0){
foreach ($_POST as $k=>$v)
$inputData->$k = get_magic_quotes_gpc()?stripslashes($v):$v;
// 1.2. form post( {a:'b',c:'d'} ) or xmlhttp post
}else{
$request = file_get_contents('php://input');
if($request){
$request = json_decode($request);
foreach ($request as $k=>$v)
$inputData->$k = is_string($v)?get_magic_quotes_gpc()?stripslashes($v):$v:$v;
}
}
// 2. for "get" request
$request = $_SERVER['QUERY_STRING'];
// 2.1. get ?a=b$c=d
if($request){
if(strstr($request,'=')!==false){
foreach ($_GET as $k=>$v)
$inputData->$k = get_magic_quotes_gpc()?stripslashes($v):$v;
// 2.2. get ?{a:'b',c:'d'}
}else{
$request = json_decode(rawurldecode($request));
foreach ($request as $k=>$v)
$inputData->$k = is_string($v)?get_magic_quotes_gpc()?stripslashes($v):$v:$v;
}
}
return $inputData;
}
// echo response data, or error info
function xui_echoResponse($inputData, $outputData, $ok=true){
$callback = XUI_KEYWORD_CALLBACK;
$data = XUI_KEYWORD_DATA;
$err = XUI_KEYWORD_ERROR;
if(isset($inputData)){
if(isset($inputData->$callback))
$callbackV=$inputData->$callback;
unset($inputData);
}
$outputDataWrapped=new stdClass;
if($ok)
$outputDataWrapped->$data = $outputData;
else
$outputDataWrapped->$err = $outputData;
$outputDataWrapped=json_encode($outputDataWrapped);
// wrap result data for xui.IAjax and xui.SAjax
if(_.isset($callbackV)){
// for xui.IAjax
if($callbackV=="window.name"){
$outputDataWrapped="<script type='text' id='json'>".$outputDataWrapped."</script><script type='text/javascript'>window.name=document.getElementById('json').innerHTML;</script>";
}
// for xui.SAjax
else{
$outputDataWrapped = $callbackV.'('.$outputDataWrapped.')';
}
}
// for xui.Ajax
echo $outputDataWrapped;
}
/* example
public function action(){
$inputData = xui_getRequestData();
$outputData = null;
$ok=true;
// $outputData=...
// $ok=true;
xui_echoResponse($inputData, $outputData, $ok);
}
*/
?>
demo.php:
php code
<?php
// include lib
include_once("xuiservice.php");
/**
* the following code may be in a controller function( for Yii, CodeIgniter etc..)
**/
$outputData=new stdClass;
$ok=true;
try{
// get request data
$inputData = xui_getRequestData();
if(rand(0,1)>0.5){
// successful
$ok=true;
// business logic code
// $outputData can be any variable
$outputData->strRresult="str";
$outputData->intResult=microtime()*1000000;
$outputData->inputData=$inputData;
}else{
// fail
$ok=false;
// error info
$outputData->code="1";
$outputData->message="error message";
}
}catch (Exception $e){
// fail
$ok=false;
// error info
$outputData->code=$e->getCode();
$outputData->message=$e->getMessage();
}
// echo result
xui_echoResponse($inputData, $outputData, $ok);
?>
CrossUI PHP Backend Demo - online