Xajax中文手册(第一版)
原文:http://xajax.sourceforge.net/
英文原版:Copyright©2005J.MaxWilson
简体中文翻译:HonestQiao(乔楚)/2005-12-717:23/(第一版)
*什么是xajax?
*xajax如何工作?
*为什么我要使用xajax代替其他PHP的Ajax库?
*如何在我的PHP脚本之中使用xajax?
*如何异步更新内容?
*如何异步处理表单数据?
*如何给xajax增加定制功能?
*我能在私有或者收费产品之中使用xajax吗?
什么是xajax?
Xajax是一个开源的PHP类库它能够让你黏合HTML、CSS、JavaScript和PHP,轻而易举的开发功能强大、基于WEB的AJAX应用软件.使用xajax开发的应用软件,无需重新调入页面,就能够异步调用服务器端的PHP函数和更新内容.
xajax如何工作?
你的应用软件需要异步调用的PHP函数,xajax的PHP对象都生成了对应的封装好了的JavaScript函数.当被调用时,封装的函数使用JavaScript的XMLHttpRequest对象与服务器异步通讯,调用xajax对象对应的PHP函数.调用结束后,PHP函数由xajax返回一个xajax的XML响应传递给应用程序.XML响应包含了特定的指令和数据,他们可以被xajax的JavaScript消息分析器解析,并且被用于更新你的应用程序的内容.
为什么我要使用xajax代替其他PHP的ajax库?
你应该选择一个最是和你的项目需要的库.
xajax提供了以下的功能,它们使得ajax富有特色而又功能强大:
Xajax特殊的XML响应/javascript消息分析系统帮助你做到,自动的处理函数返回的数据,按照PHP函数返回的指令更新内容或者状态.因为xajax作了这些工作Becausexajaxdoesthework,你不需要写javascript的回调处理函数.
Xajax反对将代码和数据紧密地杂糅在一起的主张,并且保持xajax的代码从与他代码分离.因为它是对象构造的,你可以加上自己定制的功能给xajax去扩展xajaxResponse类和使用addScript方法.
xajax可以工作在Firefox,Mozilla,大部分基于Mozilla的浏览器,InternetExplorer,和Safari.
除了更新元素的值和内含的HTML内容(innerHTML),xajax还能用于更新样式(styles),css类,多选和单选按钮选择,甚至可以更新任何元素的属性.
xajax支持使用一维或者多维数组、关联数组(哈希数组)作为xajax函数的参数从javascript传送给PHP.反之Additionally,如果你传送一个javascript的对象给xajax函数,PHP函数将接受一个描叙对象属性的关联数组(哈希数组).
xajax提供了一种简单的异步表单处理方式.使用xajax.getFormValues()javascript方法,你可以轻而易举的在表单之中提交一个描绘值的数组作为参数传送到xajax异步处理函数:
xajax_processForm(xajax.getFormValues(’formId’);
它可以处理复杂的input元素名称,例如”checkbox[][]“或者”name[first]“产生的多维或者关联数组(哈希数组),就是普通提交表单那样使用PHP的$_GET数组
使用xajax你可以动态的发送附加的javascript作为请求的响应到你的应用软件中运行,而这就和动态的更新元素的属性一样方便.
Xajax会自动比较PHP函数返回的数据与你已经标记需要修改的元素属性.只有当新的数据确实可以改变现有的属性,属性才会真的被更新.这将可消除程序在一定时间间隔内更新与当前内容相同或者不同的内容而出现的明显的闪烁.
每一个通过xajax简单注册的函数都可以有不同的请求方式.所有的函数默认使用POST方式,除非你明确的指定使用GET方式.如果使用GET请求,你必须非常明确的考虑它确实是你所需要的
如果没有指定URI,xajax将设法自动确定脚本的URI.Xajax的自动确定算法经过了充分的验证,确保在大部分HTTPS或者未知端口的HTTP服务器上也可以正常的工作.
Xajax使用UTF8编码所有的请求和响应,以确保支持绝大部分的字符和语言.Xajax已经成功测试了多种不同的UNICODE字符,包括Spanish,Russian,Arabic,andHebrew
几乎所有xajax生成的javascript都可以通过动态的外部javascript包含到你的web程序之中.当你在浏览器之中查看程序的源代码时,不会有JavaScript的函数定义混杂在HTML标记之中.
Xajax可以使用在Smarty模板系统之中,仅仅需要创建一个smarty变量就可以包含xajax的javascript:
$smarty->assign(’xajax_javascript’,$xajax->getJavascript());
然后你可以使用在header模版之中使用
{$xajax_javascript}
从而把xajax应用到你的站点.
如何在我的PHP脚本之中使用xajax?
Xajax的设计是如此的富有特色,以至于不管是已有的web程序还是新的项目,它都能够被极其简单的部署和应用.仅仅需要七步,你就可以在几乎任何PHP脚本之中加入xajax的强大功能:
1.包含xajax类库:
require_once(”xajax.inc.php”);
2.实例化xajax对象:
$xajax=newxajax();
3.注册你需要通过xajax调用的PHP函数的名称:
$xajax->registerFunction(”myFunction”);
4.编写注册的PHP函数,并且在函数之中使用xajaxResponse对象返回XML指令:
functionmyFunction($arg)
{
//对$arg做一些基本处理例如从数据库检索数据
//然后把结果赋值给变量,例如$newContent
//实例化xajaxResponse对象
$objResponse=newxajaxResponse();
//添加指令到响应之中,用于指派
//指定元素(例如id=”SomeElementId”)的innerHTML属性的新的内容
$objResponse->addAssign(”SomeElementId”,”innerHTML”,$newContent);
//返回xajaxResponse对象生成的XML响应
return$objResponse->getXML();
}
5.在你的脚本输出任何信息之前,调用xajax用于接管请求:
$xajax->processRequests();
6.在页面的
标签之间,告诉xajax生成所必需的JavaScript:PHP:
$xajax->printJavascript(); |
7.在程序中,从JavaScript事件或者函数调用前面注册的函数:
就这么简单.xajax会处理其他所有的事情.你所要做的主要工作就是编写PHP函数,然后从函数之中返回xajax的XML响应。而后者通过xajaxResponse类可以非常简单的生成.
如何异步更新内容?
Xajax最富有特色的功能或许就是xajaxResponse类.其他的Ajax库需要你自己编写JavaScript的回调句柄去处理一个异步请求返回的数据并更新内容.xajax,从另外一个角度来说,允许你使用PHP简单的控制内容.xajaxResponse让你在PHP函数之中创建XML指令返回给你的程序.XML将被xajax的消息分析器解析,指令将告诉xajax如何更新程序的内容和状态.xajaxResponse类目前提供了以下指令:
addAssign($sTargetId,$sAttribute,$sData)
给命名为$sTargetId的元素的$sAttribute属性赋值$sData
$objResponse->addAssign(”contentDiv”,”innerHTML”,”SomeText”);
$objResponse->addAssign(”checkBox1″,”checked”,”true”);
addAppend($sTargetId,$sAttribute,$sData)
给命名为$sTargetId的元素的$sAttribute属性追加值$sData
$objResponse->addAppend(”contentDiv”,”innerHTML”,”SomeText”);
addPrepend($sTargetId,$sAttribute,$sData)
预备给命名为$sTargetId的元素的$sAttribute属性赋值$sData
$objResponse->addPrepend(”contentDiv”,”innerHTML”,”SomeText”);
addReplace($sTargetId,$sAttribute,$sSearch,$sData)
替换命名为$sTargetId的元素的$sAttribute属性的值之中的$sSearch为$sData
$objResponse->addReplace(”contentDiv”,”innerHTML”,”text”,”text“);
addClear($sTargetId,$sAttribute)
清空命名为$sTargetId的元素的$sAttribute属性的值
$objResponse->addClear(”Input1″,”value”);
addCreate($sParentId,$sTagname,$sId,$sType)
在已经存在的命名为$sParentId的元素下添加一个名叫$sTagName的子元素,并且把他的id赋值为$sId,可选的类型赋值为$sType.
$objResponse->addCreate(”form1″,”input”,”pass”,”password”);
addRemove($sElementId)
从你的程序之中移除命名为$sElementId的元素
$objResponse->addRemove(”div1″);
addAlert($sMsg)
显示一个内容为$sMsg的警告框(JavaScript的Alert)
$objResponse->addAlert(”Thisissometext”);
addScript($sJS)
执行JavaScript代码$sJS(演示代码原文有误)
$objResponse->addScript(”vartxt=prompt(’getsometext’);”);
一个独立的XML响应可能包含多个指令,他们将按照加入响应的顺序执行.让我们用一个用户在你的程序之中点击按钮为例来进行说明.Onclick事件调用PHP函数对应的javascript封装.这个封装通过XMLHttpRequest发送异步请求到服务器给xajax调用PHP函数.PHP函数做了一次数据库查询,处理了一些数据,或者序列化.然后你使用xajaxResponse类生成包含多个指令的xajax的XML响应,并回送给xajax的消息分析器执行:
$objResponse=newxajaxResponse();
$objResponse.addAssign(”myInput1″,”value”,$DataFromDatabase);
$objResponse.addAssign(”myInput1″,”style.color”,”red”);
$objResponse.addAppend(”myDiv1″,”innerHTML”,$DataFromDatabase2);
$objResponse.addPrepend(”myDiv2″,”innerHTML”,$DataFromDatabase3);
$objResponse.addReplace(”myDiv3″,”innerHTML”,”xajax”,”xajax“);
$objResponse.addScript(”varx=prompt(”EnterYourName”);”);
return$objResponse->getXML();
$objResponse=newxajaxResponse();
$objResponse.addAssign(”myInput1″,”value”,$DataFromDatabase);
$objResponse.addAssign(”myInput1″,”style.color”,”red”);
$objResponse.addAppend(”myDiv1″,”innerHTML”,$DataFromDatabase2);
$objResponse.addPrepend(”myDiv2″,”innerHTML”,$DataFromDatabase3);
$objResponse.addReplace(”myDiv3″,”innerHTML”,”xajax”,”xajax“);
$objResponse.addScript(”varx=prompt(”EnterYourName”);”);
return$objResponse->getXML();
xajax消息分析器将会解析XML消息,并执行以下工作:
1.id为myInput1的元素的值将被赋值为$DataFromDatabase的数据.
2.id为myInput1的元素的颜色将会变为red.
3.$DataFromDatabase2的数据会被追加到id为myDiv1的元素innerHTML之中.
4.$DataFromDatabase3的数据会被预先赋值给id为myDiv2的元素innerHTML之中.
5.id为myDiv3的元素的innerHTML之中所有的”xajax”将被替换为”xajax“;使得所有的单词xajax显示加粗.
6.一个提示框将会显示,用来询问用户姓名,从提示框返回的值会被命名为x的javascript变量接收.
所有这些都由构成的PHP函数在服务器端执行并返回xajax的XML响应.
如何异步处理表单数据?
Xajax使得异步处理表单数句非常非常的简单.xajax.getFormValues()方法会自动的从表单提取数据,并作为一个参数提交给xajax注册的PHP函数.
xajax.getFormValues()仅仅需要一个参数,可以是你需要处理得表单的id,或者是一个实际的表单对象.你也可以使用xajax.getFormValues作为一个参数给xajax函数,例如:
xajax_processFormData(xajax.getFormValues(’formId’));
xajax会生成一个与表单数据对应的请求字符串给xajax服务器解析,然后以一个与表单数据对应的数组传递给PHP函数,就想你提交表单使用PHP的$_GET数组那么简单.
Xajax可以处理类似普通多维数组或者联合数组(哈希数组)等形式的复杂输入名字.例如,如果一个表单有三个多选框(checkboxes)并且都命名为”checkbox[]“,但是值分别为”check1″,”check2″,和”check3″,然后使用xajax.getFormValues函数作为参数传递给xajax函数,则PHP函数会接受到一个如下的数组:
array(
’checkbox’=>
array(
0=>’check1′,
1=>’check2′,
2=>’check3′,
),
)
作为函数参数的数组的结构与传统意义上提交表单之后的$_GET数组的结构相同.你可以访问数组之中的checkbox的数据:$aFormData['checkbox'][0]
如何给xajax增加定制功能?
Xajax可以使用各种服加的用户定制功能进行扩展.正因为xajax是完全面向对象的,并且可以使用xajaxResponse的addScript()方法,所以他具有无限扩展的可能.你可以创建你自己的xajax响应类,来继承xajaxResponse类以及它的方法,并加上你自己定制的响应.让我们用一个定制的增加选择组合框(selectcomboboxes)选项的响应指令的例子来说明.你可以象下面这样扩展xajaxResponse类:
classmyXajaxResponseextendsxajaxResponse
{
functionaddAddOption($sSelectId,$sOptionText,$sOptionValue)
{
$sScript=”varobjOption=newOption(’”.$sOptionText.”‘,’”.$sOptionValue.”‘);”;
$sScript.=”document.getElementById(’”.$sSelectId.”‘).options.add(objOption);”;
$this->addScript($sScript);
}
}
现在,取代xajaxResponse对象的初始化,把你自己的myXajaxResponse对象的初始化定义到你的xajaxPHP函数之中:
$objResponse=newmyXajaxResponse();
$objResponse->addAssign(”div1″,”innerHTML”,”SomeText”);
$objResponse->addAddOption(”select1″,”NewOption”,”13″);
return$objResponse->getXML();
被调用时,这个方法将会发送需要的javascript到页面并执行.当然你也有另外一种做法Alternatively,你可以在你的程序之中创建一个如下的javascript函数:
functionaddOption(selectId,txt,val)
{
varobjOption=newOption(txt,val);
document.getElementById(selectId).options.add(objOption);
}
并且使用addScript()调用这个方法:
$objResponse->addScript(”addOption(’select1′,’NewOption’,'13′);”);
我能在私有或者收费产品之中使用xajax吗?
简而言之:能,只要你愿意.
xajaxPHP类库的发布遵循GNULesserGeneralPublicLicense(LGPL).
Popularity: 6% [?]

Leave a Reply