[转]xajax会员注册实例

作者: 无喱头
出处: 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有
更高的灵活与兼容性,能与任何(笔者武断的?)模板文件相结合,正如例子中的
PHP代码:
   
   

parent
::assign('xajax_javascript'
$this->xajax->getJavascript('drivers/xajax'));

所表现的一现,smarty很容易的就能把由xajax产生的xajax驱动JS发送到前端系统
中去。这也是我为什么使用此类的原因之一。

那么我们接着讲实际实用。

我们不讨论register.php程序的运行、实现原理,来看
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类,很简单的把执行程序定位在了我们DEMO中检测文件。
通过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查看相当资源),对于初学者
来说,其中的两个方法对我们最有用
PHP代码:
   
   

xajaxResponse
::addAssign($sTarget,$sAttribute,$sData);
xajaxResponse::addAlert($sMsg);

前者为应用程序输出标准的xml,后者为调试代码(xajax允许在不打开xajax->debugOn()的方法下,对单个方法进行DEBUG),这也是xajax缔造者为
我们提供的一个很实用的方法。我们可能要随时调试我们的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文件。打开此文件,查找
PHP代码:
   
   

<{$xajax_javascript}>

此处接收了由smarty发送来由xajax产生的js代码。

查找
PHP代码:
   
   

xajax_processFormLoginName
(xajax.getFormValues("Form1"));
xajax_processFormNickName(xajax.getFormValues("Form1"));
xajax_processFormEmail(xajax.getFormValues("Form1"));

就这么简单。。。

有兴趣吗,自己试试?
虽然我不建议在前端程序中使用此类代码,但在大多数不靠google、baidu活着的网站中使用,效果还是不错的。
 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值