- 浏览: 243004 次
- 性别:
- 来自: ph
文章分类
最新评论
-
zrj_software:
说了等于没说,LZ能否把DLL代码给我研究下啊30729375 ...
如何在Delphi中调用.Net编写的DLL中的函数 -
reyesyang:
正在查找ruby单例模式相关资料,很有帮助,谢谢。
ruby中的单例模式 -
chaochao_pc:
您好,您的通讯工具能传输文件吗? 我在上边好像没找到!!! ...
Silverlight Socket 实现收发信息 -
huaxia524151:
谢谢,解决问题。return self.name.encode ...
Django笔记5(管理站点) -
yahon:
在flash中如何获取呢?
Flash+html--网页向FLASH传递参数
* 什么是xajax?
* xajax如何工作
?
* 为什么我要使用xajax代替其他PHP
的Ajax
库?
* 如何在我的PHP脚本之中使用xajax?
* 如何更新内容?
* 如何处理表单数据?
* 如何给xajax增加定制功能?
* 如何创建Loading...信息?
* 如何改变xajax的编码设置?
* 我能在私有或者收费产品之中使用xajax吗?
什么是xajax?
xajax是一个开源
的 PHP 类库 它能够让你黏合HTML
、CSS
、Javascrīpt和PHP,轻而易举的开发功能强大、基于WEB的AJAX应用软件. 使用xajax开发的应用软件,无需重新调入页面,就能够异步调用服务器端的PHP函数和更新内容.
xajax 如何工作?
你的应用软件需要异步调用的PHP函数,
xajax的PHP对象都生成了对应的封装好了的Javascrīpt函数.
当被调用时,封装的函数使用Javascrīpt的XMLHttpRequest对象与服务器异步通讯,调用xajax对象对应的PHP函数.
调用结束后, PHP函数由xajax返回一个xajax的XML
响应传递给应用程序. XML响应包含了特定的指令和数据,他们可以被xajax的Javascrīpt消息分析器解析,并且被用于更新你的应用程序的内容.
为什么我要使用xajax代替其他PHP的ajax库?
你应该选择一个最适合你的项目需要的库。
xajax 提供了以下的功能, 它们使得ajax富有特色而又功能强大:
* xajax特殊的 XML 响应 / javascrīpt 消息分析系统 帮助你做到, 自动的处理函数返回的数据,按照PHP函数返回的指令更新内容或者状态. 因为xajax作了这些工作, 你不需要写javascrīpt的回调处理函数.
* xajax反对将代码 和数据紧密地杂糅在一起的主张, 并且保持xajax的代码从与他代码分离. 因为它是对象 构造的, 你可以加上自己定制的功能给xajax去扩展xajaxResponse 类和使用addscrīpt方法.
* xajax 可以工作在 Firefox, Mozilla, 大部分基于 Mozilla 的浏览器, Internet Explorer, 和 Safari.
* 除了更新元素的值和内含的HTML内容(innerHTML), xajax 还能用于更新样式(styles), css 类, 多选和单选按钮选择,甚至可以更新任何元素的属性.
* xajax 支持使用一维或者多维数组、关联数组(哈希数组) 作为xajax函数的参数从javascrīpt传送给PHP. 反之Additionally, 如果你传送一个javascrīpt的对象给xajax函数,PHP函数将接受一个描叙对象属性的关联数组(哈希数组).
* xajax 提供了一种简单的异步表单处理方式. 使用 xajax.getFormValues() javascrīpt 方法, 你可以轻而易举的在表单之中提交一个描绘值的数组作为参数传送到xajax异步处理函数:
-
xajax_processForm( xajax.getFormValues ( 'formId' ) ;
它可以处理复杂的input 元素名称 ,例如 "checkbox[][]" 或者 "name[first]" 产生的多维或者关联数组(哈希数组), 就是普通提交表单那样使用PHP的$_GET数组
* 使用xajax你可以动态的发送附加的javascrīpt作为请求的响应到你的应用软件中运行,而这就和动态的更新元素的属性一样方便.
* xajax会自动比较PHP函数返回的数据与你已经标记需要修改的元素属性. 只有当新的数据确实可以改变现有的属性,属性才会真的被更新. 这将可消除程序在一定时间间隔内更新与当前内容相同或者不同的内容而出现的明显的闪烁.
* 每一个通过xajax简单注册的函数都可以有不同的请求方式. 所有的函数默认使用POST方式,除非你明确的指定使用GET方式. 如果使用GET请求,你必须非常明确的考虑它确实是你所需要的
* 如果没有指定URI,xajax将设法自动确定脚本的URI. xajax的自动确定算法经过了充分的验证,确保在大部分HTTPS或者未知端口的HTTP服务器上也可以正常的工作.
* xajax使用UTF8编码所有的请求和响应,以确保支持绝大部分的字符和语言. xajax已经成功测试了多种不同的UNICODE字符,包括Spanish, Russian, Arabic, and Hebrew
* 几乎所有xajax生成的javascrīpt都可以通过动态的外部javascrīpt包含到你的web程序之中. 当你在浏览器之中查看程序的源代码时,不会有Javascrīpt的函数定义混杂在HTML标记之中.
* xajax可以使用在Smarty模板系统之中,仅仅需要创建一个smarty变量就可以包含xajax的javascrīpt:
-
$smarty ->assign ( 'xajax_javascrīpt' , $xajax ->getJavascrīpt ( ) ) ;
然后你可以使用在header模版之中使用
-
[ $xajax_javascrīpt]
从而把xajax应用到你的站点.
如何在我的PHP脚本之中使用xajax?
xajax的设计是如此的富有特色,以至于不管是已有的web程序还是新的项目,它都能够被极其简单的部署和应用. 仅仅需要七步,你就可以在几乎任何PHP脚本之中加入xajax的强大功能:
1. 包含xajax类库:
-
require_once ( "xajax.inc.php" ) ;
2. 实例化xajax 对象:
-
$xajax = new xajax( ) ;
3. 注册你需要通过xajax调用的PHP函数的名称:
-
$xajax ->registerFunction ( "myFunction" ) ;
4. 编写注册的PHP函数,并且在函数之中使用xajaxResponse 对象返回XML指令:
-
function myFunction( $arg )
-
[
-
// 对$arg做一些基本处理例如从数据库 检索数据
-
// 然后把结果赋值给变量,例如$newContent
-
-
// 实例化xajaxResponse 对象
-
$objResponse = new xajaxResponse( ) ;
-
-
// 添加指令到响应之中,用于指派
-
// 指定元素(例如id="SomeElementId")的innerHTML属性的新的内容
-
$objResponse ->addAssign ( "SomeElementId" ,"innerHTML" , $newContent ) ;
-
//返回xajaxResponse 对象生成的XML响应
-
return $objResponse ;
-
]
5. 在你的脚本输出任何信息之前,调用xajax用于接管请求:
-
$xajax ->processRequests ( ) ;
6. 在页面的 标签之间, 告诉xajax生成所必需的Javascrīpt:
-
<?php $xajax ->printJavascrīpt ( ) ; ?>
7. 在程序中,从Javascrīpt事件或者函数调用前面注册的函数:
就这么简单. xajax 会处理其他所有的事情. 你所要做的主要工作就是编写PHP函数,然后从函数之中返回xajax的XML响应。而后者通过xajaxResponse类可以非常简单的生成.
如何更新内容?
xajax最富有特色的功能或许就是xajaxResponse类.
其他的Ajax库需要你自己编写Javascrīpt的回调句柄去处理一个异步请求返回的数据并更新内容. xajax, 从另外一个角度来说,
允许你使用PHP简单的控制内容. xajaxResponse 让你在PHP函数之中创建XML指令返回给你的程序.
XML将被xajax的消息分析器解析,指令将告诉xajax如何更新程序的内容和状态. xajaxResponse类目前提供了以下指令:
* addConfirmCommands (integer $iCmdNumber, string $sMessage)
弹出一个显示内容为$sMessage的confirm确认提示框
如果点击确认框中的取消将跳过后面的$iCmdNumber条命令
-
$objResponse ->addConfirmCommands ( 1 , "Do you want to preview the new data?" ) ;
* addAssign(string $sTarget, string $sAttribute, string $sData)
给ID为$sTargetId的元素的$sAttribute属性赋值$sData
-
$objResponse ->addAssign ( "contentDiv" ,"innerHTML" ,"Some Text" ) ;
-
$objResponse ->addAssign ( "checkBox1" ,"checked" ,"true" ) ;
* addAppend(string $sTarget, string $sAttribute, string $sData)
给ID为$sTargetId的元素的$sAttribute属性后面追加值$sData
-
$objResponse ->addAppend ( "contentDiv" ,"innerHTML" ,"Some Text" ) ;
* addPrepend(string $sTarget, string $sAttribute, string $sData)
给ID为$sTargetId的元素的$sAttribute属性前面添加值$sData
-
$objResponse ->addPrepend ( "contentDiv" ,"innerHTML" ,"Some Text" ) ;
* addReplace(string $sTarget, string $sAttribute, string $sSearch, string $sData)
替换命名为$sTargetId的元素的$sAttribute属性的值之中的$sSearch为$sData
-
$objResponse ->addReplace ( "contentDiv" ,"innerHTML" ,"text" ,"<strong>text</strong>" ) ;
* addClear(string $sTarget, string $sAttribute)
清空命名为$sTargetId的元素的$sAttribute属性的值
-
$objResponse ->addClear ( "Input1" ,"value" ) ;
* addAlert(string $sMsg)
显示一个内容为 $sMsg 的警告框(Javascrīpt的Alert)
-
$objResponse ->addAlert ( "This is some text" ) ;
* addRedirect(string $sURL)
转跳到另一个地址$sURL,使用addscrīpt()方法实现
-
$objResponse ->addRedirect ( "http://www.xajaxproject.org" ) ;
* addscrīpt(string $sJS)
执行Javascrīpt代码 $sJS
-
$objResponse ->addscrīpt ( "var txt = prompt('get some text');" ) ;
* addscrīptCall()
执行Javascrīpt代码中的函数,第一个参数表示Javascrīpt函数名,后面的参数为Javascrīpt函数的参数
-
$objResponse ->addscrīptCall ( "myJSFunction" , "arg 1" , "arg 2" , 12345 ) ;
* addRemove(string $sTarget)
从你的页面之中移除ID为$sTarget的元素
-
$objResponse ->addRemove ( "Div2" ) ;
* addCreate(string $sParent, string $sTag, string $sId)
在已经存在的ID为$sParentId的元素内添加一个名叫$sTag的子元素,并且把它的id赋值为$sId。INPUT类型的元素须使用addCreateInput()方法.。
-
$objResponse ->addCreate ( "childDiv" , "h3" , "myid" ) ;
* addInsert(string $sBefore, string $sTag, string $sId)
在已经存在的ID为$sBefore的元素前面添加一个名叫$sTag的元素,并且把它的id赋值为$sId。
-
$objResponse ->addInsertAfter ( "parentDiv" , "h3" , "myid" ) ;
* addInsertAfter(string $sAfter, string $sTag, string $sId)
在已经存在的ID为$sBefore的元素后面添加一个名叫$sTag的元素,并且把它的id赋值为$sId。
-
$objResponse ->addInsert ( "parentDiv" , "h3" , "myid" ) ;
* addCreateInput(string $sParent, string $sType, string $sName, string $sId)
在已经存在的ID为$sParent的元素内添加一个类型为$sType,Name为$sName,ID为$sId的INPUT元素。
-
$objResponse ->addCreateInput ( "form1" , "text" , "username" , "input1" ) ;
* addInsertInput(string $sBefore, string $sType, string $sName, string $sId)
在已经存在的ID为$sBefore的元素前面添加一个类型为$sType,Name为$sName,ID为$sId的INPUT元素。
-
$objResponse ->addInsertInput ( "input5" , "text" , "username" , "input1" ) ;
* addInsertInputAfter(string $sAfter, string $sType, string $sName, string $sId)
在已经存在的ID为$sAfter的元素后面添加一个类型为$sType,Name为$sName,ID为$sId的INPUT元素。
-
$objResponse ->addInsertInputAfter ( "input7" , "text" , "email" , "input2" ) ;
* addEvent(string $sTarget, string $sEvent, string $sscrīpt)
为ID是$sTarget的元素后面添加一个名为$sEvent的事件,其执行的脚本为$sscrīpt
-
$objResponse ->addEvent ( "contentDiv" , "onclick" , "alert(\' Hello World\' );" ) ;
* addHandler(string $sTarget, string $sEvent, string $sHandler)
为ID是$sTarget的元素名为$sEvent的事件添加一个句柄$sHandler(即Javascrīpt函数名),可以为一个事件添加多个句柄。
-
$objResponse ->addHandler ( "contentDiv" , "onclick" , "content_click" ) ;
# addEvent与addHandler的区别:
addEvent关心的是事件被触发,即onclick中的on-,addHandler关心的是事件触发了什么操作,即onclick中的click。
其差别类似于为一个元素定义事件属性和使用addEventListener()方法定义一个事件句柄。
* addRemoveHandler(string $sTarget, string $sEvent, string $sHandler)
删除ID是$sTarget的元素名为$sEvent的事件中的句柄$sHandler。
-
$objResponse ->addRemoveHandler ( "contentDiv" , "onclick" , "content_click" ) ;
* addIncludescrīpt(string $sFileName)
包含名为$sFileName的Javascrīpt文件。
-
$objResponse ->addIncludescrīpt ( "functions.js" ) ;
一个独立的XML响应可能包含多个指令, 他们将按照加入响应的顺序执行. 让我们用一个用户在你的程序之中点击按钮为例来进行说明. Onclick事件调用PHP函数对应的javascrīpt封装.这个封装通过XMLHttpRequest发送异步请求到服务器给xajax调用 PHP函数. PHP函数做了一次数据库查询, 处理了一些数据, 或者序列化. 然后你使用xajaxResponse类生成包含多个指令的xajax的XML响应 ,并回送给xajax的消息分析器执行:
-
$objResponse = new xajaxResponse( ) ;
-
$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" ,"<strong>xajax</strong>" ) ;
-
$objResponse .addscrīpt( "var x = prompt(" Enter Your Name");" ) ;
-
return $objResponse ;
xajax消息分析器将会解析XML消息,并执行以下工作:
2. id为myInput1的元素的值将被赋值为 $DataFromDatabase的数据.
3. id为myInput1的元素的颜色将会变为red.
4. $DataFromDatabase2的数据会被追加到id为myDiv1的元素innerHTML之中.
5. $DataFromDatabase3的数据会被预先赋值给id为myDiv2的元素innerHTML之中.
6. id为myDiv3的元素的innerHTML 之中所有的"xajax"将被替换为"xajax
"; 使得所有的单词 xajax 显示加粗.
7. 一个提示框将会显示,用来询问用户姓名,从提示框返回的值会被命名为x的javascrīpt变量接收.
所有这些都由构成的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
函数会接受到一个如下的数组:
作为函数参数的数组的结构与传统意义上提交表单之后的$_GET数组的结构相同. 你可以访问数组之中的checkbox 的数据: $aFormData['checkbox'][0]
如何给xajax增加定制功能?
xajax可以使用各种附加的用户定制功能进行扩展.
正因为xajax是完全面向对象的,并且可以使用xajaxResponse的addscrīpt()方法,所以他具有无限扩展的可能.
你可以创建你自己的xajax响应类,来继承xajaxResponse 类以及它的方法,并加上你自己定制的响应.
让我们用一个定制的增加选择组合框(select combo boxes)选项的响应指令的例子来说明.
你可以象下面这样扩展xajaxResponse 类:
-
class myxajaxResponse extends xajaxResponse
-
[
-
function addAddOption( $sSelectId , $sOptionText , $sOptionValue )
-
[
-
$sscrīpt = "var ōbjOption = new Option('" .$sOptionText ."','" .$sOptionValue ."');" ;
-
$sscrīpt .= "document.getElementById('" .$sSelectId ."').options.add(objOption);" ;
-
$this ->addscrīpt ( $sscrīpt ) ;
-
]
-
]
现在, 取代xajaxResponse 对象的初始化, 把你自己的 myxajaxResponse 对象的初始化定义到你的 xajax PHP 函数之中:
-
$objResponse = new myxajaxResponse( ) ;
-
$objResponse ->addAssign ( "div1" , "innerHTML" , "Some Text" ) ;
-
$objResponse ->addAddOption ( "select1" ,"New Option" ,"13" ) ;
-
-
return $objResponse ;
被调用时,这个方法将会发送需要的javascrīpt到页面并执行. 当然你也有另外一种做法Alternatively, 你可以在你的程序之中创建一个如下的javascrīpt函数:
-
<scrīpt type="text/javascrīpt" >
-
function addOption( selectId,txt,val)
-
[
-
var ōbjOption = new Option( txt,val) ;
-
document.getElementById ( selectId) .options .add ( objOption) ;
-
]
-
</scrīpt>
并且使用addscrīpt() 调用这个方法:
-
$objResponse ->addscrīpt ( "addOption('select1','New Option','13');" ) ;
如何创建Loading...信息?
xajax提供了一个简单但是重要的功能,那就是在xajax
进行服务器调用时模拟反馈用的“Loading...”信息。xajax已经定义了两个
Javascrīpt函数:xajax.loadingFunction()和xajax.doneLoadingFunction(),你可以用你自己
定义的Javascrīpt函数来重新定义它们以满足项目的需要,例如:
-
xajax.loadingFunction = myCustomLoadingFunction;
或者
-
xajax.loadingFunction = function ( ) [ xajax.$( 'loadingBar' ) .style .display ='block' ;] ;
发表评论
-
客户端页面字符集对session的影响
2011-05-23 12:42 969session是使用在服 ... -
PHP生成Flash动画实例
2010-10-19 17:25 1007使用 Ming 库动态构 ... -
PHP生成图表pChart
2010-07-21 12:09 1218pChart是一个开源的图表生成库,主要涉及3个Class:p ... -
用php读取和编写xml dom(使用 DOM 库、SAX 解析器和正则表达式)
2010-07-15 14:00 1083有许多技术可用于用 PHP 读取和编写 XML。本文提供了三种 ... -
php引号转义及表单储值问题
2010-07-07 16:10 1636转载自 merry_pjx 最终编辑 merry_pjx ... -
php heredoc使用方法小结
2010-06-09 12:10 5413Heredoc技术,在正规的PHP文档中和技术书籍中一般没有详 ... -
用PHPMailer发送邮件
2010-06-09 10:56 2223这是用开源项目PHPMailer ... -
Windows7下IIS配置PHP
2009-10-26 16:29 7420微软和Zend合作以后,针对IIS推出了专门的FastCGI支 ... -
php中的页面执行时间计算
2009-08-20 11:49 1152可以使用microtime函数来实现,这个函数返回当前 ... -
php的日期比较
2009-08-14 14:27 2303php里是没有内置的日期比较函数,但可以转换成统一格式后再进行 ... -
CakePHP你必须知道的21条技巧
2009-08-06 15:01 1244这篇文章可以说是CakePHP ... -
字符集编码的转换
2009-08-06 14:11 987在编程的时候,往往需要字符集间编码的转换,这就需要 ... -
PHP柱状图、饼状图和线性图
2009-08-05 16:58 4519首先我们要介绍一下我们在这篇文章中使用的PHP 类Lib ... -
php获取当前日期时间
2009-08-05 13:10 5068函数 date ( string format [, in ... -
关于PHP Pear 安装及使用
2009-07-16 11:53 1947-------------- 安装pe ... -
利用PHP和PEAR动态创建和编辑TAR文档
2009-07-16 11:34 1157如果你曾为你的UNIX系统下载过widget,那么你肯定遇到过 ... -
PHP 5 数据对象 (PDO) 抽象层与 Oracle
2009-06-20 12:55 1096一名新 PHP 数据对象 (PDO ... -
ArrayAccess接口介绍
2009-06-20 12:51 893在 PHP5 中多了一系列新接口。在 HaoHappy 翻译的 ...
相关推荐
### Xajax中文手册详解 #### 一、Xajax概述 Xajax是一款开源的PHP类库,旨在简化HTML、CSS、JavaScript和PHP之间的交互,助力开发者轻松构建强大的基于Web的Ajax应用。通过Xajax,Web应用可以实现无刷新更新,即在...
### Xajax中文手册知识点概述 #### 一、Xajax简介 **Xajax**是一个开源的PHP类库,它能够帮助开发者轻松地结合HTML、CSS、JavaScript和PHP来创建功能强大的基于Web的AJAX应用程序。使用Xajax开发的应用程序能够在...
Xajax中文手册可能会包含以下内容: 1. Xajax基础:介绍如何安装Xajax,创建基本的AJAX功能,以及如何与PHP后端交互。 2. 函数和对象:详细解释Xajax的核心函数和对象,如`xajax_function`、`xajaxResponse`等。 ...
xajax chm 手册 中文
对于处理表单数据,你可以将表单提交事件绑定到 xajax 函数,这样在用户提交表单时,xajax 将捕获数据,发送到服务器处理,然后再更新表单或页面的其他部分以显示结果。 **如何给 xajax 增加定制功能?** xajax ...
### Xajax:构建高效Web应用的关键技术 #### 一、Xajax是什么? Xajax是一个开源的PHP类库,它的设计初衷是为了简化AJAX(Asynchronous JavaScript and XML)应用的开发流程,让开发者能够轻松地结合HTML、CSS、...
1 Ajax中文手册(快速上手) 2 Apache中文配置 3 CSS中文手册 4 DOM文档对象中文手册 5 DOS实例手册 6 javascript5.5 7 jQueryAPI_CHM 8 mysql 9 mysql配置 ...15 xajax中文手册(教程) 16 XML-and-PHP
### Xajax中文手册知识点概述 #### 一、Xajax简介 - **定义**: Xajax是一个开源的PHP类库,能够使开发者轻松结合HTML、CSS、JavaScript和PHP来开发功能强大的基于Web的Ajax应用软件。 - **特点**: - 开发的应用...
3. **深入Xajax**:阅读Xajax中文手册,学习其API和使用技巧,提升开发效率。 4. **兼容性测试**:考虑不同浏览器对Ajax的支持情况,确保应用在多种环境下运行正常。 5. **性能优化**:学习如何减少请求次数,缓存...
这个压缩包包含了xajax的源代码以及中文手册,对于初学者和有经验的开发者来说都是一个宝贵的资源。 首先,我们要理解xajax的核心功能。xajax是一个轻量级的PHP库,它使服务器端的PHP脚本能够与客户端的JavaScript...
### phpGrid 3.0 用户手册关键知识点解析 #### 一、引言 phpGrid是一个专为PHP开发者设计的强大框架,旨在加速MIS系统(包括ERP、CRM、人力资源管理等)、网站后台及演示程序的开发过程。其核心优势在于简化了常见...
代码简单,不依赖任何第3方类库(去掉以往版本中xajax,prototype pear库) 使用简单,一条SQL语句就可以完成所有功能示 灵活控制,可以很方便控制显示区域并内置了权限控制 同时支持PDO和MYSQL函数 支持多个grid...