作者: 无喱头
出处: www.phpsoho.com
自去年以来,ajax应用是层出不穷,虽然笔者并不强烈的建议在的前端程序中使用ajax,除非你与google、baidu有着友好的合作关系,但技术的探讨是无限的。下面笔者就给一个ajax会员注册检查的DEMO。
对于phper来说,javascript并不是我们的必修课程,但ajax对javascript的要求是相当高的,我们可能被长篇幅的js脚本吓退,从而使我们放弃学习ajax。但幸运的是,总有是无私的人在为phper完成想要的东西。例如:xajax。
正如我所说,并不是所有的phper对js都了如指掌,我也一样。那么还犹豫什么呢?就使用xajax吧(做个广告^_^!)。
首先布署一下我们的文件系统,这次DEMO的目录结构如下:
我们忽略文件系统配置(具体请看实例),单从xajax这块说起。
在reguser.php文件中,大家已经看到,我们引入了xajax驱动文件,由于xajax提供了xajax::getJavascript()方法,所以笔者认为使得xajax有
更高的灵活与兼容性,能与任何(笔者武断的?)模板文件相结合,正如例子中的
中去。这也是我为什么使用此类的原因之一。
那么我们接着讲实际实用。
我们不讨论register.php程序的运行、实现原理,来看
通过xajax::registerFunction方法,我们注册了三个函数"processFormLoginName,
processFormNickName,processFormEmail",顾名思义,三个方法分别担负着检测三
项内容:“注册用户名、用户昵称及用户email”,并将由xajax内部产生的js文件发送到
前端。在我们显示表单的方法中载入,这就完成了第一步;
前端程序完事了,我们需要后台程序来进行支撑其运行,并动输入的内容进行检测。我一
直认为,尽可能的少给服务器压力,所以关于字符是合法,EMAIL是否合法,
字符长度限制这些初级的工作就交给JS做了,具体请看.tpl文件,上面有详细的code。
当然,我们需要在通过初步检测后,再进一点检测,这是后话了。
reguser.server.php,此文件位于libs/xajax/下面。重中之中,应该是这个文件了。
依然载入xajax类包,并且实例化,请注意,此处的实例化,没有必要再进行设置执行路
径了。在网上看到类似的文章,仍然在此处进行的路径设定。
其实这是没有必要的,因为xajax的追踪机制使用得默认的为当前文件。注册三个方法不
再重述。
在这个文件中,需要着重讲解的是 xajaxResponse 类包,这个类包可以说是xajax的最
核心的东西了。具体它的一些配置,用法及扩展(xajax为开发者提供了灵活简便的扩展接口,
具体可以看CU-PHP论坛中的版主的文章或者phpsoho.com查看相当资源),对于初学者
来说,其中的两个方法对我们最有用
我们提供的一个很实用的方法。我们可能要随时调试我们的JS代码,但这却是令人头痛的事情。在大类的CODE中,我们很难分得清到底是那一段出错了。对
于JS,相应大多数人都有过这种感受。
使用方法简单得不用再说了。
我们就一个方法实例来进行讲解:
global $db,$lang; 引入下全局变量
$objResponse = new xajaxResponse(); 实例化 xajaxResponse类
$db->table = "reguser"; 设置执行的表名称 (表问我为啥只有reguser而没有带 litou_ 呢,自己去看源码,本DEMO中,提供了偶的sqlUtil类包,对于adodb相应扩展);
其实上面的流程大家写得可能比我更出色。。。。然后我们进行用户登陆名称检测,根据相应的结果,返回相应的值,并且返回一个对象。以至本文件最低的发出。。。
系统核心文件完成,那么我们如何在前端文件中使用呢?
DEMO提供了reguser.tpl文件。打开此文件,查找
查找
有兴趣吗,自己试试?
虽然我不建议在前端程序中使用此类代码,但在大多数不靠google、baidu活着的网站中使用,效果还是不错的。
出处: www.phpsoho.com
自去年以来,ajax应用是层出不穷,虽然笔者并不强烈的建议在的前端程序中使用ajax,除非你与google、baidu有着友好的合作关系,但技术的探讨是无限的。下面笔者就给一个ajax会员注册检查的DEMO。
对于phper来说,javascript并不是我们的必修课程,但ajax对javascript的要求是相当高的,我们可能被长篇幅的js脚本吓退,从而使我们放弃学习ajax。但幸运的是,总有是无私的人在为phper完成想要的东西。例如:xajax。
正如我所说,并不是所有的phper对js都了如指掌,我也一样。那么还犹豫什么呢?就使用xajax吧(做个广告^_^!)。
首先布署一下我们的文件系统,这次DEMO的目录结构如下:
文件系统布署完毕,现在开始实际应用吧!PHP代码:
|- register.php
|- db_config.php
|- drivers
|- smarty
|- adodb
|- xajax
|- libs
|- mySmarty.class.php
|- sqlUtil.class.php
|- xajax.reg.server.php
|- tempaltes
|- default
|- templates_c
|- register.tpl
|- images
|- 图片文件略
因为本次DEMO是从以前程序中摘下来的,以前采用了语言包,为了方便,DEMO给出个小语
言包来
|- lang
|- zh_cn.lang.php
我们忽略文件系统配置(具体请看实例),单从xajax这块说起。
在reguser.php文件中,大家已经看到,我们引入了xajax驱动文件,由于xajax提供了xajax::getJavascript()方法,所以笔者认为使得xajax有
更高的灵活与兼容性,能与任何(笔者武断的?)模板文件相结合,正如例子中的
所表现的一现,smarty很容易的就能把由xajax产生的xajax驱动JS发送到前端系统PHP代码:
parent::assign('xajax_javascript',
$this->xajax->getJavascript('drivers/xajax'));
中去。这也是我为什么使用此类的原因之一。
那么我们接着讲实际实用。
我们不讨论register.php程序的运行、实现原理,来看
在方法内部,实例化了xajax类,很简单的把执行程序定位在了我们DEMO中检测文件。PHP代码:
function __xajax()
{
$this->xajax = new xajax('libs/xajax/reguser.server.php');
$this->xajax->registerFunction('processFormLoginName');
$this->xajax->registerFunction('processFormNickName');
$this->xajax->registerFunction('processFormEmail');
parent::assign('xajax_javascript',
$this->xajax->getJavascript('drivers/xajax'));
}
通过xajax::registerFunction方法,我们注册了三个函数"processFormLoginName,
processFormNickName,processFormEmail",顾名思义,三个方法分别担负着检测三
项内容:“注册用户名、用户昵称及用户email”,并将由xajax内部产生的js文件发送到
前端。在我们显示表单的方法中载入,这就完成了第一步;
前端程序完事了,我们需要后台程序来进行支撑其运行,并动输入的内容进行检测。我一
直认为,尽可能的少给服务器压力,所以关于字符是合法,EMAIL是否合法,
字符长度限制这些初级的工作就交给JS做了,具体请看.tpl文件,上面有详细的code。
当然,我们需要在通过初步检测后,再进一点检测,这是后话了。
reguser.server.php,此文件位于libs/xajax/下面。重中之中,应该是这个文件了。
依然载入xajax类包,并且实例化,请注意,此处的实例化,没有必要再进行设置执行路
径了。在网上看到类似的文章,仍然在此处进行的路径设定。
其实这是没有必要的,因为xajax的追踪机制使用得默认的为当前文件。注册三个方法不
再重述。
在这个文件中,需要着重讲解的是 xajaxResponse 类包,这个类包可以说是xajax的最
核心的东西了。具体它的一些配置,用法及扩展(xajax为开发者提供了灵活简便的扩展接口,
具体可以看CU-PHP论坛中的版主的文章或者phpsoho.com查看相当资源),对于初学者
来说,其中的两个方法对我们最有用
前者为应用程序输出标准的xml,后者为调试代码(xajax允许在不打开xajax->debugOn()的方法下,对单个方法进行DEBUG),这也是xajax缔造者为PHP代码:
xajaxResponse::addAssign($sTarget,$sAttribute,$sData);
xajaxResponse::addAlert($sMsg);
我们提供的一个很实用的方法。我们可能要随时调试我们的JS代码,但这却是令人头痛的事情。在大类的CODE中,我们很难分得清到底是那一段出错了。对
于JS,相应大多数人都有过这种感受。
使用方法简单得不用再说了。
我们就一个方法实例来进行讲解:
注:此方法必须在声明后才有效。PHP代码:
function processFormLoginName($aFormValues)
{
global $db,$lang;
$objResponse = new xajaxResponse();
$db->table = "reguser";
if( !$db->checkIsExist('loginname',$aFormValues['loginname']) )
{
$objResponse->addAssign('regloginnameinfo','className',
'box_error');
$objResponse->addAssign('regloginnameinfo','innerHTML',
$lang['loginNameIsExist']);
}
else
{
$objResponse->addAssign('regloginnameinfo','className',
'box_right');
$objResponse->addAssign('regloginnameinfo','innerHTML',
$lang['regInputOk']);
}
return $objResponse;
}
global $db,$lang; 引入下全局变量
$objResponse = new xajaxResponse(); 实例化 xajaxResponse类
$db->table = "reguser"; 设置执行的表名称 (表问我为啥只有reguser而没有带 litou_ 呢,自己去看源码,本DEMO中,提供了偶的sqlUtil类包,对于adodb相应扩展);
其实上面的流程大家写得可能比我更出色。。。。然后我们进行用户登陆名称检测,根据相应的结果,返回相应的值,并且返回一个对象。以至本文件最低的发出。。。
系统核心文件完成,那么我们如何在前端文件中使用呢?
DEMO提供了reguser.tpl文件。打开此文件,查找
此处接收了由smarty发送来由xajax产生的js代码。PHP代码:
<{$xajax_javascript}>
查找
就这么简单。。。PHP代码:
xajax_processFormLoginName(xajax.getFormValues("Form1"));
xajax_processFormNickName(xajax.getFormValues("Form1"));
xajax_processFormEmail(xajax.getFormValues("Form1"));
有兴趣吗,自己试试?
虽然我不建议在前端程序中使用此类代码,但在大多数不靠google、baidu活着的网站中使用,效果还是不错的。