跳转到内容


xajax会员注册实例


  • 您无法回复此主题
No replies to this topic

#1 冰力

    Administrator

  • 总版主
  • 1318 帖子数:

发表于 2007/03/16 11:27:34

自去年以来,ajax应用是层出不穷,虽然笔者并不强烈的建议在的前端程序中使用ajax,除非你与google、baidu有着友好的合作关系,但技术的探讨是无限的。下面笔者就给一个ajax会员注册检查的DEMO。

对于phper来说,javascript并不是我们的必修课程,但ajax对javascript的要求是相当高的,我们可能被长篇幅的js脚本吓退,从而使我们放弃学习ajax。但幸运的是,总有是无私的人在为phper完成想要的东西。例如:xajax。

正如我所说,并不是所有的phper对js都了如指掌,我也一样。那么还犹豫什么呢?就使用xajax吧(做个广告B)!)。

首先布署一下我们的文件系统,这次DEMO的目录结构如下:
[indent]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




[/indent]
文件系统布署完毕,现在开始实际应用吧!

我们忽略文件系统配置(具体请看实例),单从xajax这块说起。

在reguser.php文件中,大家已经看到,我们引入了xajax驱动文件,由于xajax提供了xajax::getJavascript()方法,所以笔者认为使得xajax有
更高的灵活与兼容性,能与任何(笔者武断的?)模板文件相结合,正如例子中的
[indent]PHP代码:




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




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

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

我们不讨论register.php程序的运行、实现原理,来看
[indent]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'));


}




[/indent]
在方法内部,实例化了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查看相当资源),对于初学者
来说,其中的两个方法对我们最有用
[indent]PHP代码:




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

xajaxResponse::addalert($sMsg);




[/indent]

前者为应用程序输出标准的xml,后者为调试代码(xajax允许在不打开xajax->debugOn()的方法下,对单个方法进行DEBUG),这也是xajax缔造者为
我们提供的一个很实用的方法。我们可能要随时调试我们的JS代码,但这却是令人头痛的事情。在大类的CODE中,我们很难分得清到底是那一段出错了。对
于JS,相应大多数人都有过这种感受。

使用方法简单得不用再说了。

我们就一个方法实例来进行讲解:
[indent]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;


}




[/indent]
注:此方法必须在声明后才有效。
global $db,$lang; 引入下全局变量
$objResponse = new xajaxResponse(); 实例化 xajaxResponse类
$db->table = "reguser"; 设置执行的表名称(表问我为啥只有reguser而没有带 litou_ 呢,自己去看源码,本DEMO中,提供了偶的sqlUtil类包,对于adodb相应扩展);

其实上面的流程大家写得可能比我更出色。。。。然后我们进行用户登陆名称检测,根据相应的结果,返回相应的值,并且返回一个对象。以至本文件最低的发出。。。

系统核心文件完成,那么我们如何在前端文件中使用呢?

DEMO提供了reguser.tpl文件。打开此文件,查找
[indent]PHP代码:



<{$xajax_javascript}>




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

查找
[indent]PHP代码:




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

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

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




[/indent]
就这么简单。。。

有兴趣吗,自己试试?
虽然我不建议在前端程序中使用此类代码,但在大多数不靠google、baidu活着的网站中使用,效果还是不错的。