查看: 8558|回复: 0
打印 上一主题 下一主题

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

[复制链接]
跳转到指定楼层
1#
发表于 2007-9-14 22:34:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
台州网址导航
<三>包含的内容:
* 如何处理表单数据?
* 如何给xajax增加定制功能?
* 如何创建Loading...信息?
* 如何改变xajax的编码设置?
* 我能在私有或者收费产品之中使用xajax吗?

最早发布在我的个人Blog,文章地址:http://www.flyinghail.net/?p=44

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


如何处理表单数据?
  xajax使得异步处理表单数据非常非常的简单. xajax.getFormValues()方法会自动的从表单提取数据,并作为一个参数提交给xajax注册的PHP函数.
  xajax.getFormValues() 仅仅需要一个参数, 可以是你需要处理得表单的id, 或者是一个实际的表单对象. 你也可以使用xajax.getFormValues作为一个参数给xajax 函数, 例如:

PHP:

  xajax_processFormData(xajax.getFormValues('formId'));
  xajax 会生成一个与表单数据对应的请求字符串给xajax服务器解析,然后以一个与表单数据对应的数组传递给PHP函数,就想你提交表单使用PHP的$_GET数组那么简单.
  xajax可以处理类似普通多维数组或者联合数组(哈希数组)等形式的复杂输入名字. 例如, 如果一个表单有三个多选框(checkboxes)并且都命名为 "checkbox[]", 但是值分别为 "check1", "check2", 和 "check3", 然后使用 xajax.getFormValues 函数作为参数传递给xajax 函数, 则 PHP 函数会接受到一个如下的数组:

PHP:

array (
  'checkbox' =>
  array (
    0 => 'check1',
    1 => 'check2',
    2 => 'check3',
  ),
)
作为函数参数的数组的结构与传统意义上提交表单之后的$_GET数组的结构相同. 你可以访问数组之中的checkbox 的数据: $aFormData['checkbox'][0]

如何给xajax增加定制功能?
  xajax可以使用各种附加的用户定制功能进行扩展. 正因为xajax是完全面向对象的,并且可以使用xajaxResponse的addScript()方法,所以他具有无限扩展的可能. 你可以创建你自己的xajax响应类,来继承xajaxResponse 类以及它的方法,并加上你自己定制的响应. 让我们用一个定制的增加选择组合框(select combo boxes)选项的响应指令的例子来说明. 你可以象下面这样扩展xajaxResponse 类:

PHP:

class myxajaxResponse extends xajaxResponse
{
        function addAddOption($sSelectId, $sOptionText, $sOptionValue)
        {
                $sScript  = "var objOption = new Option('".$sOptionText."','".$sOptionValue."');";
                $sScript .= "document.getElementById('".$sSelectId."').options.add(objOption);";
                $this->addScript($sScript);
        }
}
  现在, 取代xajaxResponse 对象的初始化, 把你自己的 myxajaxResponse 对象的初始化定义到你的 xajax PHP 函数之中:

PHP:

$objResponse = new myxajaxResponse();
$objResponse->addAssign("div1", "innerHTML", "Some Text");
$objResponse->addAddOption("select1","New Option","13");

return $objResponse;
  被调用时,这个方法将会发送需要的javascript到页面并执行. 当然你也有另外一种做法Alternatively, 你可以在你的程序之中创建一个如下的javascript函数:

JavaScript:

<script type="text/javascript">
function addOption(selectId,txt,val)
{
        var objOption = new Option(txt,val);
        document.getElementById(selectId).options.add(objOption);
}
</script>
  并且使用addScript() 调用这个方法:

PHP:

$objResponse->addScript("addOption('select1','New Option','13');");
如何创建Loading...信息?
  xajax提供了一个简单但是重要的功能,那就是在xajax进行服务器调用时模拟反馈用的“Loading...”信息。xajax已经定义了两个 Javascript函数:xajax.loadingFunction()和xajax.doneLoadingFunction(),你可以用你自己定义的Javascript函数来重新定义它们以满足项目的需要,例如:

JavaScript:

xajax.loadingFunction = myCustomLoadingFunction;
或者

JavaScript:

xajax.loadingFunction = function(){xajax.$('loadingBar').style.display='block';};
  loadingFunction()是ajax执行前执行的Javascript函数,doneLoadingFunction为ajax执行完毕后执行的Javascript函数

下面是一个完整的Loading...信息例子:

PHP:

<?php
require("xajax.inc.php");

function slow_function()
{
    $objResponse = new xajaxResponse();
    sleep(2); //we'll do nothing for two seconds
    $objResponse->addAlert("All done");
    return $objResponse;
}

$xajax = new xajax();
$xajax->registerFunction('slow_function');
$xajax->processRequests();
?><html>
    <head>
        <title>Loading Bar Demo</title>
        <? $xajax->printJavascript(); ?>
    </head>
    <body>
        <script type="text/javascript">
        <!--
            xajax.loadingFunction =
                function(){xajax.$('loadingMessage').style.display='block';};
            function hideLoadingMessage()
            {
                xajax.$('loadingMessage').style.display = 'none';
            }
            xajax.doneLoadingFunction = hideLoadingMessage;
        // --></script>
        <input type="button" onclick="xajax_slow_function();" value="Slow Function" />
        <div id="loadingMessage" style="font-size: 22px; display: none;">
            Loading...
        </div>
    </body>
</html>
如何改变xajax的编码设置?
  xajax默认是UTF-8编码的,如果打算在其他编码的页面中使用xajax,可以参考下面的操作:

1、重新定义XAJAX_DEFAULT_CHAR_ENCODING

PHP:

//define ('XAJAX_DEFAULT_CHAR_ENCODING', 'utf-8' );
define ('XAJAX_DEFAULT_CHAR_ENCODING', 'ISO-8859-1' );
2、在构造函数中定义编码

PHP:

$xajax = new xajax("","xajax_",'ISO-8859-1');
$objResponse = new xajaxResponse('ISO-8859-1');
3、初始化后设置编码

PHP:

$xajax = new xajax();
$xajax->setCharEncoding('ISO-8859-1');
$objResponse = new xajaxResponse();
$objResponse->setCharEncoding('ISO-8859-1');
以上三个方法使用其中一种,或者搭配使用2和3。
如果你总是获得invalid XML的错误信息,而且你仅仅想要显示字符,不是进行比较和处理(必须安装了PHP的mbstring扩展)。你可以尝试使用xajax->outputEntitiesOn()开启转化特殊的字符的功能。

即使你按照上面的说明设置了返回的编码,但是XmlHttpRequest类提交的数据依然是UTF-8编码的。xajax为我们提供了decodeUTF8InputOn()方法来开启UTF-8编码转换。方法如下:

PHP:

$xajax = new xajax();
$xajax->setCharEncoding('ISO-8859-1');
$xajax->decodeUTF8InputOn();
提示:
* 尽可能的使用UTF-8编码
* 如果你在xajax构造函数或者使用$xajax->setCharEncoding()方法定义了编码类型,不要忘记在 xajaxResponse构造时进行同样的操作。如果你在xajax和xajaxResponse中使用不同的编码设置,在IE下将会产生XML错误。
* 不管你设置为使用什么编码,从Javascript传递过来的数据都是UTF-8编码的。使用$xajax->decodeUTF8InputOn()方法打开编码转换功能,可以将UTF-8自动转换成你设置的编码。

下面是一个完整的编码设置例子:

PHP:

<?php
require ('xajax.inc.php');

function testEncoding($strText)
{
        $objResponse = new xajaxResponse('ISO-8859-1');
        $objResponse->addAssign("div1","innerHTML",$strText);
   
        return $objResponse;
}

$xajax = new xajax();
$xajax->setCharEncoding('ISO-8859-1');
$xajax->decodeUTF8InputOn();

$xajax->registerFunction("testEncoding");

$xajax->processRequests();
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
    <?php
        $xajax->printJavascript();
    ?>
</head>

<body>
    <div id="div1"></div>

    <form id="form1" onsubmit="return false;">
        <input type="text" value="Espa&ntilde;ol" id="text1" name="text1" />
        <input type="submit" value="Submit" onclick="xajax_testEncoding(xajax.$('text1').value);" />
    </form>

</body>
</html>
我能在私有或者收费产品之中使用xajax吗?
  简而言之: 能,只要你愿意。
  xajax PHP 类库的发布遵循 GNU Lesser General Public License (LGPL).

2006.08.01 FlyingHail 修改&补充
简体中文手册版权所有 &copy; 2005 HonestQiao(乔楚)
Copyright &copy; 2005 J. Max Wilson

<完>
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 转播转播 分享分享 分享淘帖
台州维博网络(www.tzweb.com)专门运用PHP+MYSQL/ASP.NET+MSSQL技术开发网站门户平台系统等。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

网站推广
关于我们
  • 台州朗动科技(Tzweb.com)拥有多年开发网站平台系统门户手机客户端等业务的成功经验。主要从事:政企网站,系统平台,微信公众号,各类小程序,手机APP客户端,浙里办微应用,浙政钉微应用、主机域名、虚拟空间、后期维护等服务,满足不同企业公司的需求,是台州地区领先的网络技术服务商!

Hi,扫描关注我

Copyright © 2005-2026 站长论坛 All rights reserved

Powered by 站长论坛 with TZWEB Update Techonolgy Support

快速回复 返回顶部 返回列表