xajax中文手册(HonestQiao第一版,FlyingHail修改版)

  最近要用xajax,从网上找到了HonestQiao(乔楚)翻译的xajax中文手册第一版(因为引用地方太多,最初出处不可考了- -b),发现对应当前的版本已经不是太合适了,所以参考着xajax的wiki对该文进行了一些修改和补充:补充xajaxResponse类中方法的说明、添加“如何创建Loading…信息?”、“如何改变xajax的编码设置?”两项,都不是完整的原文翻译,主要是在个人理解的基础上描述的。

原文:http://xajax.sourceforge.net/
英文原版:Copyright © 2005 J. Max Wilson
简体中文翻译:HonestQiao(乔楚)/2005-12-7 17:23/(第一版)
修改&补充:FlyingHail/2006.08.01 16:43/参考:http://wiki.xajaxproject.org/

* 什么是xajax?
* xajax如何工作?
* 为什么我要使用xajax代替其他PHP的Ajax库?
* 如何在我的PHP脚本之中使用xajax?
* 如何更新内容?
* 如何处理表单数据?
* 如何给xajax增加定制功能?
* 如何创建Loading…信息?
* 如何改变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作了这些工作, 你不需要写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异步处理函数:
  [js num=1]xajax_processForm(xajax.getFormValues(‘formId’);[/js]
  它可以处理复杂的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:
   [php num=1]$smarty->assign(‘xajax_javascript’, $xajax->getJavascript());[/php]
   然后你可以使用在header模版之中使用
   [smarty num=1]{$xajax_javascript}[/smarty]
   从而把xajax应用到你的站点.

如何在我的PHP脚本之中使用xajax?
  xajax的设计是如此的富有特色,以至于不管是已有的web程序还是新的项目,它都能够被极其简单的部署和应用. 仅仅需要七步,你就可以在几乎任何PHP脚本之中加入xajax的强大功能:

1. 包含xajax类库:

  [php num=1]require_once(“xajax.inc.php”);[/php]

2. 实例化xajax 对象:

  [php num=1]$xajax = new xajax();[/php]

3. 注册你需要通过xajax调用的PHP函数的名称:

  [php num=1]$xajax->registerFunction(“myFunction”);[/php]

4. 编写注册的PHP函数,并且在函数之中使用xajaxResponse 对象返回XML指令:

[php num=1]function myFunction($arg)
{
  // 对$arg做一些基本处理例如从数据库检索数据
  // 然后把结果赋值给变量,例如$newContent

  // 实例化xajaxResponse 对象
  $objResponse = new xajaxResponse();

  // 添加指令到响应之中,用于指派
  // 指定元素(例如id=”SomeElementId”)的innerHTML属性的新的内容
  $objResponse->addAssign(“SomeElementId”,”innerHTML”, $newContent);

  //返回xajaxResponse 对象生成的XML响应
  return $objResponse;
}[/php]

5. 在你的脚本输出任何信息之前,调用xajax用于接管请求:

[php num=1]$xajax->processRequests();[/php]

6. 在页面的 标签之间, 告诉xajax生成所必需的Javascript:

[php num=1]< ?php $xajax->printJavascript(); ?>[/php]

7. 在程序中,从Javascript事件或者函数调用前面注册的函数:

[html num=1]

  

11 thoughts on “xajax中文手册(HonestQiao第一版,FlyingHail修改版)

  1. dominic 提到的问题是 UTF-8 很常见的问题,一个最基本的惯例,也应该养成习惯,php 文件用 UTF-8 不要加 BOM。

    其实任何文件使用 UTF-8 都建议不要加 BOM,没必要还会引起很多问题,就像 dominic 里面 BOM 解释的最后一句 “BOM 的本意是在 UTF-16 中用来表示高低字节序列的。”,我记得是这样说的:UTF-16 所有的字符都是两个字节,这样有些原本就是单字节字符(似乎就是ASCII的字符)就有一个问题,到底是00 XX还是XX 00,这两种对于 UTF-16 来说都是正确的,于是就有了 BOM 来告诉读取 UTF-16 字符的软件这些字符的字节顺序是 00 在前还是 00 在后。这个问题在 UTF-8 是不存在的,有没有 BOM 软件都能够正确的识别 UTF-8 ,所以 UTF-8 的BOM完全是没必要的。

  2. 你好,我是剛准備用xajax的.但在我的測試中,
    addReplace這個函數出了點問題.
    php中代碼為:
    $objResponse->addReplace(‘div2′,’innerHTML’,’test’,’aaaaaa’);
    (將id為div2的div中test換成’aaaaaa’)

    我調試發現php端產生的xml為

    s
    test

    r
    aaaaaa

    這樣在客戶端時
    xajax.js中相應的replace找不到要被換的值
    請問你遇到過嗎?
    謝謝了

  3. 应该不单单生成这样的xml吧,应该还包括
    n => rp
    t => div2
    p=>innerHTML
    这三项吧
    其实xajax之所以能够由php控制js就是靠传递特定的xml然后由js判断执行一些已经定义好的函数,这个函数我并没有测试过,建议打开xajax的debug看一下,另外把div2的innerHTML alert出来看看对不对

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据