四、常见Ajax编程框架
    既然上述Ajax框架已经能工作了,为什么还有那么多的框架呢?
    随着页面的复杂,可能需要书写大量的Javascript脚本来对页面中的DOM对象进行控制,工作量和复杂度会大大增加。Ajax编程框架通常利用面向对象的方法,对一些基本的对象和行为及其复杂性进行了合理的封装,建造了一套有自己特色的类库,并且考虑了效率和可扩充性等优点。我们在开发时,可以使用较少的、更清晰的代码,完成自己的工作。也使程序员有更多的时间和精力考虑业务逻辑本身,而不是与一堆脚本纠缠在一起。
    框架都是与后台脚本相关的。通过后台脚本编程,我们可以不必书写大量的Javascript脚本就能构建浏览器兼容的Ajax应用。
    比如,我使用一个比较流行的PHP xAjax框架,对前边的示例程序进行了改写:
 

  1. <?php 
  2.    require_once (”../xajax/xajax.inc.php”);  
  3.  
  4.    //服务器处理函数  
  5.    function processForm($aFormValues)  
  6.    {  
  7.     $objResponse = new xajaxResponse();  
  8.     $bError = false;  
  9.  
  10.     //清空错误信息  
  11.     $objResponse->addClear(”usernameInfo”, “innerHTML”);  
  12.  
  13.     //判断账号  
  14.     if (trim($aFormValues[’username’]) == “”)  
  15.     {  
  16.      $objResponse->addAppend(”usernameInfo”, “innerHTML”, “Please Input user name.”);  
  17.      $bError = true;  
  18.     }  
  19.     else  
  20.     {  
  21.        if(trim($aFormValues[’username’])==”Thomas”)  
  22.         $objResponse->addAppend(”usernameInfo”, “innerHTML”, “Has been registed”);  
  23.        else  
  24.         $objResponse->addAppend(”usernameInfo”, “innerHTML”, “Has not been registed”);  
  25.      $bError = false;  
  26.     }  
  27.  
  28.     if (!$bError)  
  29.     {  
  30.      $sForm .=”<div>账号:” .$aFormValues[’username’]. “</div>\n”;  
  31.     }  
  32.     else  
  33.     {  
  34.      $objResponse->addAssign(”submitButton”, “value”, “Submit”);  
  35.      $objResponse->addAssign(”submitButton”, “disabled”, false);  
  36.     }  
  37.  
  38.     return $objResponse;  
  39.    }  
  40.  
  41.    //构造对象  
  42.    $xajax = new xajax();  
  43.  
  44.    //注册处理函数  
  45.    $xajax->registerFunction(”processForm”);  
  46.  
  47.    //接管HTTP请求  
  48.    $xajax->processRequests();  
  49.  ?> 
  50.  
  51.  <!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd“> 
  52.  <html> 
  53.  <head> 
  54.    <meta http-equiv=”Content-Type” content=”text/html; charset=gb2312> 
  55.    <?php 
  56.     //生成必要的JavaScript  
  57.     $xajax->printJavascript(’../xajax/’);  
  58.    ?> 
  59.  
  60.    <title>XAJAX 用户注册</title> 
  61.    <style type=”text/css”> 
  62.      #formWrapper{ color: #111111; background-color: rgb(200,200,200); width: 360px;}  
  63.      #title{color: #FFFFFF; text-align: center; background-color: #000000; }  
  64.      #formDiv{ padding: 20px;}  
  65.      .submitDiv{ margin-top: 10px; text-align: center; }  
  66.      .errorSpan{ color:red;}  
  67.    </style> 
  68.  
  69.    <script type=”text/javascript”> 
  70.    <!–//提交表单  
  71.      function submitSignup()  
  72.      {  
  73.       xajax.$(’submitButton’).disabled=true;  
  74.       xajax.$(’submitButton’).value=”验证中…”;  
  75.       xajax_processForm(xajax.getFormValues(”signupForm”));  
  76.       return false;  
  77.      }  
  78.    //–> 
  79.    </script> 
  80.  
  81.  </head> 
  82.  
  83.  <body> 
  84.  
  85.    <form id=”signupForm” action=”javascript:void(null);” onsubmit=”submitSignup();”> 
  86.    用户名:<input type=”text” name=”username” value=”">   
  87.    <input type=”button” name=”check” value=”Check Only one” onClick=”submitSignup();”> 
  88.    <input type=”submit” id=”submitButton” name=”submit” value=”Submit”> 
  89.    </form> 
  90.  
  91.    <div id=”usernameInfo” class=”errorSpan”> </div> 
  92.  
  93.  </body> 
  94.  </html> 


    大家看到了这段代码前边的包含语句了吧:require_once (”../xajax/xajax.inc.php”)。xajax.inc.php就是定义xajax等相关类库的文件,这个文件里还包含了大量的javascript脚本文件和其他的常数定义等。Xajax类有一条自己的属性和方法,接管和封装了原始的Ajax的行为和方法,用于处理用户的事件和页面文档对象的属性和外观。
    Ajax框架有它自己的好处,但是,目前由于Ajax框架太多,各有各的优点和缺点,特别是对PHP语言,我们很难在众多的框架中选中一个最适合我们自己的项目的框架。框架太多加大了交流的成本。框架本身在降低了代码复杂度的同时,也带来了学习的成本。不像.NET,背靠财大气粗的公司,就一套程序库,一套通用的IDE,熟练一门语言(比如C#),就可以开发Web和桌面应用。
    最后还要注意一下,Ajax并不是万金油,任何项目都想用一下。Ajax目前大多数应用在数据校验等应用上,在项目中用的时候请慎重考虑。