新闻资讯
看你所看,想你所想

xajax

xajax

Xajax是一个开源的 PHP 类库 它能够让你黏合HTML、CSS、JavaScript和PHP,轻而易举的开发功能强大、基于WEB的AJAX套用软体。

基本介绍

  • 中文名:xajax
  • 英文原版:J. Max Wilson
  • 简体中文翻译:HonestQiao
  • 最新版:v0.5 final

简介

封装的很好的php类,可以很方便实现ajax的功能。
优点,简单,对js要求不是很高,会写php的函式就能用。
英文原版:Copyright © 2005 J. Max Wilson
简体中文翻译:HonestQiao(乔楚)/2005-12-7 17:23/(第一版)
最新版:v0.5 final

什幺是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作了这些工作Because xajax does the work, 你不需要写javascript的回调处理函式.
Xajax反对将代码和数据紧密地杂糅在一起的主张, 并且保持xajax的代码从与他代码分离. 因为它是对象构造的, 你可以加上自己定製的功能给xajax去扩展xajaxResponse 类和使用addScript方法.
xajax 可以工作在 Firefox, Mozilla, 大部分基于 Mozilla 的浏览器, Internet Explorer, 和 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, and Hebrew
几乎所有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的强大功能:
包含xajax类库: require_once("xajax.inc.php");
实例化xajax 对象: $xajax = new xajax();
注册你需要通过xajax调用的PHP函式的名称: $xajax->registerFunction("myFunction");
编写注册的PHP函式,并且在函式之中使用xajaxResponse 对象返回XML指令:
function myFunction($arg){// 对$arg做一些基本处理例如从资料库检索数据// 然后把结果赋值给变数,例如$newContent// 实例化xajaxResponse 对象$objResponse = new xajaxResponse();// 添加指令到回响之中,用于指派//指定元素(例如id="SomeElementId")的innerHTML属性的新的内容$objResponse->addAssign("SomeElementId","innerHTML", $newContent);//返回xajaxResponse 对象生成的XML回响return $objResponse->getXML();}
在你的脚本输出任何信息之前,调用xajax用于接管请求:
$xajax->processRequests();
在页面的 <head></head> 标籤之间, 告诉xajax生成所必需的JavaScript:
<?php $xajax->printJavascript(); ?>
在程式中,从JavaScript事件或者函式调用前面注册的函式:
当然,如果你用的是smarty模板的话,则你需要在PHP中用下面的方法
$smarty->assign('xajax_js',$xajax->getJavascript());
然后在模板中用{$xajax_js}调用
<button onclick="xajax_myFunction(SomeArgument);">
就这幺简单. xajax 会处理其他所有的事情. 你所要做的主要工作就是编写PHP函式,然后从函式之中返回xajax的XML回响。而后者通过xajaxResponse类可以非常简单的生成.

补充

一、ajax+smarty範例和xajax的一些问题
网上关于XAJAX的教程很少,出现最多的就是那个七步使用XAJAX的文档。不过那个东西没有提到一下东西,我就简单说一下。都是自己摸索的,有不对的地方还请指教。
一切说明都以0.25版本为基础,0.5BETA的用户请顺藤摸瓜照葫芦画瓢照猫画虎举一反三……

怎幺实现逻辑和表现分离

(HTML代码和程式代码分离)
要做到这个我们必然需要一个模板引擎了(当然也可以写一个超级简单的,不过再简单也叫模板引擎吧……)
比较火的是SMARTY吧?咱们就用SMARTY+XAJAX开说。
比如我们要製作一个用户信息页面,简单的左右两边的页面。左边是导航,右边是具体的内容。
HTML我简单写一个:
<html> <head></head> <body>   <div id="main">      <div id="left">     <li><a href="#" mce_href="#" onclick="xajax_showDetail();"></a></li>    <a href="#" mce_href="#" onclick="xajax_showDetail();"> </a>    <li><a></a><a href="#" mce_href="#" onclick="xajax_showUserinfo();"></a></li>    <a href="#" mce_href="#" onclick="xajax_showUserinfo();"> </a>   </div>   <a href="#" mce_href="#" onclick="xajax_showUserinfo();">     <div id="right">     </div> </a>  </div> </body></html>
分别表示左右两个部分。左边有两个连结,点击后右边通过AJAX取得数据并且重新填充。
我们构建两个模板页面,对应上面连结。
detai.htm:
<div> {|$detail|}<!--这个$detail是smarty要替换的内容--> </div>
userinfo.htm:
<div> {|$userinfo|}<!--这个$userinfo是smarty要替换的内容--> </div>
好了準备工作结束
开始xajax server的编写
server.php:
<?php $xajax = new xajax(); $smarty = new smarty(); function Detail() { $objResponse = new xajaxResponse(); $detail = "测试XAJAX"; /*********这里是重点部分***************/ $smarty -> assign('detail',$detail);//替换模板的数据 $content = $smarty -> fetch('detail.htm');//这里是最重要的一步,smarty把动态数据替换模板,并且返回已经替换过后的模板HTML数据 /****接着我们用替换过的数据通过AJAX填充页面*****/ $objResponse -> addAssign('right','innerHTML',$content); retuen $objResponse ; } $xajax -> registerFunction('detail');//注册函式 $xajax -> processRequests();//接管请求 ?>
server.php编写结束,当然无视了userinfo这个东西,因为东西是一样的。
到此为止,我们实现了XAJAX和SMARTY结合实现AJAX效果的目的。

如何实现更炫的效果

见过很多使用AJAX技术的网站在读取数据的时候都会出现一个进度条写着读取中吧?感觉很COOL是吧,XAJAX照样也能做!
其实很简单,在要出现进度条的页面上首先放上如下代码:
<!--loding-->  <div id="loadingContainer">   <div id="loading">    页面载入中,请稍候    <br />    <img src="src/images/common/loader.gif" mce_src="src/images/common/loader.gif" />   </div>  </div>   <!--loding end-->
这样就做出了来了一个显示等待条的方块。
接着在页面里面写上如下JS代码:
<script languege="javascript/text"> loadingpic = document.getElementById('loadingContainer'); loadingpic.style.display = 'none';// 初始化进度条为不可见 /*****这两句话比较重要*****/ xajax.loadingFunction = loading; // 定义XAJAX在等待请求时候调用的函式 xajax.doneLoadingFunction = loadingDone; //定义XAJAX在或得请求数据以后调用的函式 function loading() { loadingpic.style.display = 'block'; //设定请求数据的时候可见 } function loadingDone() { loadingpic.style.display = 'none'; //设定请求结束以后消失 } </script>
就这幺简单的几句,状态条功能就实现了。
注意,如果从请求到获得数据的时间小于400毫秒的话,XAJAX默认不调用定义的函式,这主要是为了保证良好的效果。毕竟条一闪即逝没什幺意思,还不如不显示。如果非得想要让用户看见,可以在PHP里面SLEEP(1) 一下,嘿嘿。

使用了XAJAX以后滑鼠箭头频繁闪动怎幺办

这个问题一般出现需要频繁和后台沟通的情况下。比如我们定义每0.5秒请求一次伺服器。这时候你会发现一个问题,就是滑鼠箭头每隔0.5秒都会变成等待中(带个沙漏)的样子一下,闪的人心烦,并且让人产生页面一直都在刷新的可耻想法。
要解决这个问题非常的简单其实……
只要在实体化XAJAX以后加上一句话就可以了:
$xajax->waitCursorOff();
这样就可以避免滑鼠闪动了。
我试了试这个方法,好像不管用,在xajax.inc.php里也没这个方法,不过有CursorOff这个变数,把他改为FALSE就行了
二、Xajax 0.5 使用多个不同请求
怎幺把客户端和要请求的php方法分离到两个页面呢,请看下去
1)新建一个全局的xajax包含档案
<?php// Requiring the xajax core filerequire_once "xajax/xajax_core/xajax.inc.php";// Defining the xajax object$xajax = new xajax();?>
2)新建一个带标準xajax调用的通用php档案
<?php// Common file// Registering our function, remember that the URI must be a string: "handler.php"$xajax->register(XAJAX_FUNCTION, 'myFunctionA', array('URI' => "\"handler.php\""));?>
3)新建一个处理档案
<?php// Handler// Require the ajax global filerequire_once "xajax_include.php";// Require the common file for this handlerrequire_once "common.php";// Our functionfunction myFunctionA($givenParameters) {// new xajaxResponse Object$objResponse = new xajaxResponse();// Processreturn $objResponse;}// Let xajax process our request$xajax->processRequest();?>
4)新建一个主档案
<?php// Require the xajax global filerequire_once "xajax_include.php";// Require the Common file for this pagerequire_once "common.php";?><!DOCTYPE ... /><html><head><?php $xajax->printJavascript(); ?>...</head>etc ...
5)调用函式代码:
<a href='#' onclick='xajax_myFunctionA(); return false;'>
6)依上述步骤来写多种档案,分别包含各自的通用档案和处理档案。但是要注意包含所有通用档案,这样才能注册和使用所有处理函式。

转载请注明出处海之美文 » xajax

相关推荐

    声明:此文信息来源于网络,登载此文只为提供信息参考,并不用于任何商业目的。如有侵权,请及时联系我们:ailianmeng11@163.com