XAJAX 编程入门实例两则

作者:snow 日期:2006-01-25

XAJAX是一个比较优秀的AJAX toolkit工具,安装很简单,就是吧他的xajax.inc.php文件copy到你制定的目录下面就可以了。
下面举两个列子来说明如何使用

1)helloworld
helloworld是每一个编程语言所必须的,所以这里也不例外,我会就代码给出解释



<?php
// helloworld.php demonstrates a very basic xajax implementation
// using xajax version 0.1 beta4
//
http://xajax.sourceforge.n...

require ('xajax.inc.php');  #必须的,放到脚本的最前面

#调用函数,该函数被javascript调用
function helloWorld($isCaps)
{
if ($isCaps)
$text = "HELLO WORLD!";
else
$text = "Hello World!";

$objResponse = new xajaxResponse();
$objResponse->addAssign("div1","innerHTML",$text); #给id为div1的html元素的innerHTML属性分配$text指,其他的方法请参考前面贴出的XAJAX介绍

return $objResponse->getXML();   #返回赋值后的代码,采用xml格式
}

// Instantiate the xajax object. No parameters defaults requestURI to this page, method to POST, and debug to off
$xajax = new xajax();

//$xajax->debugOn(); // Uncomment this line to turn debugging on

// Specify the PHP functions to wrap. The JavaScript wrappers will be named xajax_functionname
$xajax->registerFunction("helloWorld"); #注册函数,这个也是必须的,用来保证,javascript能调用php里面的函数
// Process any requests. Because our requestURI is the same as our html page,
// this must be called before any headers or HTML output have been sent
$xajax->processRequests();
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "
http://www.w3.org/TR/xhtm....
<html>
<head>
<title>xajax example</title>
<?php
#输出javascript脚本,这个方法必须放在head之间,特别是应该放在<html>标签之前,否则无法工组
$xajax->printJavascript();
?>
</head>
<body style="text-align:center;">
<div id="div1" name="div1">&#160;</div>
<br/>

<button onclick="xajax_helloWorld(0)" >Click Me</button>
<button onclick="xajax_helloWorld(1)" >CLICK ME</button>
<script type="text/javascript">
xajax_helloWorld(0); // call the helloWorld function to populate the div on load
</script>
</body>
</html>


上面的脚本是一个简单的例子,但是体现了XAJAX使用的一个流程。需要注意的是在html脚本中,我们调用的函数名是
xajax_helloWorld (),但是我们编程和注册的函数名却是helloWorld,这不是一个错误,而是必须这样做,你可以查看xajax.inc.php的代码就知道,他默 认的在html调用的函数名前缀就是xajax_helloWorld(),因此如果你不修改xajax.inc.php,那么你在html里面调用函数 就必须加上xajax_这样的前缀。

程序演示

2)表单处理
这个例子是我花时间比较多的,也是大家比较关心的,虽然官方也给出了一个form的例子,但是对表单数据的处理都是自己再重新写的函数,而没有使用xajax.getFormValues函数,个人觉得比较复杂。下面是官方的form演示和源代码

form演示

form源代码

下面是我的代码

<?php
require("includes/xajax.inc.php");
function doSomething( $formData )
{
$objResponse = new xajaxResponse();
$str="";
foreach($formData as $key=>$value)
if (empty($str))
$str.=$key."='".$value."'";
else
$str.=",".$key."='".$value."'";
//$str="form data is ".implode(",",$formData);
//$objResponse->addAlert(print_r($formData));
$objResponse->addAssign("result", "innerHTML", $str );
return $objResponse->getXML();
}

function hb()
{
$objResponse = new xajaxResponse();
$objResponse->addAssign("doIt", "value", "Working...");
$objResponse->addAssign("doIt", "disabled", true);
$objResponse->addScript("xajax_doSomething(xajax.getFormValues('someForm'));");

return $objResponse->getXML();
}


?>
<?php
$xajax = new xajax();
//$xajax->debugOn();
$xajax->registerFunction("doSomething");
$xajax->registerFunction("hb");
$xajax->processRequests();
?>
<HTML>
<HEAD>
<?php $xajax->printJavascript(); ?>
</HEAD>

<BODY>
<form id='someForm'>
<table>
<tr>
<td>username:
<input type="text" name='user' id='user' />
</td>
<td>password:<input type="password" id='pwd' name='pwd' /></td>
<td><input type='button' id='doIt' value='Do It' onClick="xajax_hb()"></input>
</td></tr>
</table>
</form>

<div id='result'>
</div>
</BODY>
</HTML>


这个要注意的比较多
a)表单的元素必须有name属性,这个一定要注意,这是我痛苦了一天得到的结果,否则getFormValues函数将得不到表单数据。
b) doSomething($formData)函数中的参数$formData是一个数组元素,索引是表单元素的名称(属性name的值),其值是表单元素的值(属性value的值)
c) 如果debugon打开了,可能会出现死循环的警告窗口,目前还不知道原因。
posted on 2006-09-13 22:25 JRobot 阅读(448) 评论(0)  编辑  收藏 所属分类: xml相关

只有注册用户登录后才能发表评论。


网站导航: