在PHP中使用xajax
时间:2007-03-02 来源:lib
?php
/**
* 在PHP中使用xajax
* 参考《十分钟学会 xajax》÷《xajax手册》
*
* 假设你已经知道xajax是干什么用的,现在来看实例
*
*/
/* xajax在脚本中使用的步骤(7步) */
/* 第一步:调用xajax类库: */
require_once("./libs/xajax/xajax.inc.php");
/* 第二步:实例化xajax对象 */
$xajax = new xajax();
//$xajax->debugOn(); //打开ajax调试
/* 第三步:注册一个你想用xajax来调用的php函数名(与javascript中的函数名相对应 xajax_showOutput) */
$xajax->registerFunction("showOutput");
/* 第四步:编写那个你刚刚已经注册的php函数,并从中用 xajaxresponse 对象来返回xml指令集 */
function showOutput(){
$testResponse = new xajaxResponse();
$testResponse->addAlert("Hello");
$testResponse2 = new xajaxResponse();
$testResponse2->loadXML($testResponse->getXML());
$testResponse2->addReplace("this", "is", "a", "replacement");
$testResponseOutput = htmlspecialchars($testResponse2->getXML());
$objResponse = new xajaxResponse();
// 在响应实例中添加一个命令,用来将id为submittedDiv的innerhtml元素属性变为新的内容$testResponseOutput.
$objResponse->addAssign("submittedDiv", "innerHTML", $testResponseOutput);
return $objResponse;
}
/* 第五步:在你脚本传送出任何东西前,xajax都要处理所有请求 */
$xajax->processRequests();
// 如果xajax.js不存在,将自动重新生成xajax.js文件,参数为文件路径
$xajax->autoCompressJavascript("./js/xajax.js");
?>
!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/2000/REC-xhtml1-20000126/DTD/xhtml1-transitional.dtd">
html xmlns="http://www.w3.org/1999/xhtml">
head>
meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
title>xajaxResponse Test/title>
?php
/* 第六步:在该页的和标签之间插入下列代码,使xajax实例可以自己生成所必需的js */
$xajax->printJavascript("./")
?>
/head>
body>
p>div onclick="xajax_showOutput();"> 点击这里显示响应XML /div>/p>
div id="submittedDiv">这里将被响应的xml替换/div>
/body>
/html>
?php
/*
进一步了解xajax
如何异步更新内容?
Xajax最富有特色的功能或许就是xajaxResponse类. 其他的Ajax库需要你自己编写JavaScript的回调句柄去处理一个异步请求返回的数据并更新内容. xajax, 从另外一个角度来说, 允许你使用PHP简单的控制内容. xajaxResponse 让你在PHP函数之中创建XML指令返回给你的程序. XML将被xajax的消息分析器解析,指令将告诉xajax如何更新程序的内容和状态. xajaxResponse类目前提供了以下指令:
■ addAssign($sTargetId,$sAttribute,$sData)
给命名为$sTargetId的元素的$sAttribute属性赋值$sData
$objResponse->addAssign("contentDiv","innerHTML","Some Text");
$objResponse->addAssign("checkBox1","checked","true");
■ addAppend($sTargetId,$sAttribute,$sData)
给命名为$sTargetId的元素的$sAttribute属性追加值$sData
$objResponse->addAppend("contentDiv","innerHTML","Some Text");
■ addPrepend($sTargetId,$sAttribute,$sData)
预备给命名为$sTargetId的元素的$sAttribute属性赋值$sData
$objResponse->addPrepend("contentDiv","innerHTML","Some Text");
■ addReplace($sTargetId,$sAttribute,$sSearch,$sData)
替换命名为$sTargetId的元素的$sAttribute属性的值之中的$sSearch为$sData
$objResponse->addReplace("contentDiv","innerHTML","text","text");
■ addClear($sTargetId,$sAttribute)
清空命名为$sTargetId的元素的$sAttribute属性的值
$objResponse->addClear("Input1","value");
■ addCreate($sParentId, $sTagname, $sId, $sType)
在已经存在的命名为$sParentId的元素下添加一个名叫$sTagName的子元素,并且把他的id赋值为$sId,可选的类型赋值为 $sType.
$objResponse->addCreate("form1","input", "pass", "password");
■ addRemove($sElementId)
从你的程序之中移除命名为$sElementId的元素
$objResponse->addRemove("div1");
■ addAlert($sMsg)
显示一个内容为 $sMsg 的警告框(JavaScript的Alert)
$objResponse->addAlert("This is some text");
■ addScript($sJS)
执行JavaScript代码 $sJS (演示代码原文有误)
$objResponse->addScript("var txt = prompt('get some text');");
一个独立的XML响应可能包含多个指令, 他们将按照加入响应的顺序执行. 让我们用一个用户在你的程序之中点击按钮为例来进行说明. Onclick事件调用PHP函数对应的javascript封装.这个封装通过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","xajax");
$objResponse.addScript("var x = prompt(\"Enter Your Name\");");
return $objResponse->getXML();
xajax消息分析器将会解析XML消息,并执行以下工作:
1. id为myInput1的元素的值将被赋值为 $DataFromDatabase的数据.
2. id为myInput1的元素的颜色将会变为red.
3. $DataFromDatabase2的数据会被追加到id为myDiv1的元素innerHTML之中.
4. $DataFromDatabase3的数据会被预先赋值给id为myDiv2的元素innerHTML之中.
5. id为myDiv3的元素的innerHTML 之中所有的"xajax"将被替换为"xajax"; 使得所有的单词 xajax 显示加粗.
6. 一个提示框将会显示,用来询问用户姓名,从提示框返回的值会被命名为x的javascript变量接收.
所有这些都由构成的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 函数会接受到一个如下的数组:
array (
'checkbox' =>
array (
0 => 'check1',
1 => 'check2',
2 => 'check3',
),
)
作为函数参数的数组的结构与传统意义上提交表单之后的$_GET数组的结构相同. 你可以访问数组之中的checkbox 的数据: $aFormData['checkbox'][0]
*/
?>
相关阅读 更多 +
排行榜 更多 +