Xajax中文手册(三)
如何处理表单数据?
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 类以及它的方法,并加上你自己定制的响应. 让我们用一个定制的增加选择组合框(select combo boxes)选项的响应指令的例子来说明. 你可以象下面这样扩展xajaxResponse 类:
-
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 函数之中:
-
$objResponse = new myxajaxResponse();
-
$objResponse->addAssign("div1", "innerHTML", "Some Text");
-
$objResponse->addAddOption("select1","New Option","13");
-
return $objResponse;
被调用时,这个方法将会发送需要的javascript到页面并执行. 当然你也有另外一种做法Alternatively, 你可以在你的程序之中创建一个如下的javascript函数:
-
<script type="text/javascript">
-
function addOption(selectId,txt,val)
-
[
-
var objOption = new Option(txt,val);
-
document.getElementById(selectId).options.add(objOption);
-
]
-
</script>
并且使用addScript() 调用这个方法:
-
$objResponse->addScript("addOption('select1','New Option','13');");
如何创建Loading...信息?
xajax提供了一个简单但是重要的功能,那就是在xajax 进行服务器调用时模拟反馈用的“Loading...”信息。xajax已经定义了两个 Javascript函数:xajax.loadingFunction()和xajax.doneLoadingFunction(),你可以用你自己定义的Javascript函数来重新定义它们以满足项目的需要,例如:
-
xajax.loadingFunction = myCustomLoadingFunction;
或者
-
xajax.loadingFunction = function()[xajax.$('loadingBar').style.display='block';];