还有优化的空间...
XAJAX 与 SMARTY 应该要分开,原理如下:
因为SMARTY只对第一次的显示负责,SMARTY只显示完如下代码后便和XAJAX无关了
<script type="text/javascript">
var xajaxRequestUri="(xajax提交的目标文件)";//非常关键的地方
var xajaxDebug=false;
var xajaxStatusMessages=false;
var xajaxWaitCursor=true;
var xajaxDefinedGet=0;
var xajaxDefinedPost=1;
function xajax_adda(){return xajax.call("adda", arguments, 1);}
</script>
<script type="text/javascript" src="xajax/xajax_js/xajax.js"></script>
而当我们提交注册时,如果上述JS的“ xajaxRequestUri ” 为本身的话,后台处理时势必会再一次调用 SMARTY,而此时的SMARTY对我们毫无作用,但是由于本身页面的过程,smarty又再一次地在后台输出了页面,这个过程我们是看不到的,但实际上确实是执行了一次,这就对我们的提交与返回的速度产生了极大的影响,所以建议将页面实现与验证分开处理,下面一个例子可以说明一下:
reg.php 显示页面
include ('/smarty/Smarty.class.php');
require_once('xajax/xajax.inc.php');
$xajax = new xajax('chk_reg.php');//XAJAX提交指向
$xajax->registerFunction("adda");//注册adda函数
$Tpl->assign('xajax_js',$xajax->getJavascript('/xajax'));//输出xajax客户端JS
$Tpl->display('reg.htm');//模板文件
//chk_reg.php 检验与存储数据过程
require_once('xajax/xajax.inc.php');
$xajax = new xajax();
$xajax->registerFunction("adda");
$xajax->processRequests();
function adda($str)
{
global $db,$chk_user,$lang;
$objResponse = new xajaxResponse();
.......//语句过程...略
return $objResponse->getXML();
}