通过前两节的准备后,本节将独立的部分整合并完成日程表程序。日程表程序由AJAX配置文件(calendar.js)、PHP日历文件(calendar.php)、日程表XML文档(xml.php)3个部分组成。广州网站设计
1.AJAX配置文件
创建文件名为calendar.js的文件,文件内容如下:
广州网站设计
- var req;
- //日历函数
- function navigate(month,year,evt) {
- var url = "xml.php?month="+month+"&year="+year+"&event="+evt;
- //alert (url);
- if(window.XMLHttpRequest) {
- req = new XMLHttpRequest();
- } else if(window.ActiveXObject) {
- req = new ActiveXObject("Microsoft.XMLHTTP");
- }
- req.open("GET", url, true);
- req.onreadystatechange = callback;
- req.send(null);
- }
- //异步数据通知
- function callback() {
- if(req.readyState == 4) {
- var response = req.responseXML;
- var resp = response.getElementsByTagName("response");
- document.getElementById("calendar").innerHTML = resp[0].get- ElementsByTagName("content")[0].childNodes[0].nodeValue;
- //getObject("calendar").innerHTML = resp[0].getElementsByTagName ("content")[0].childNodes[0].nodeValue;
- //alert('hi');
- }
- }
- //获得元素节点
- function getObject(obj) {
- var o;
- if(document.getElementById) o = document.getElementById(obj);
- else if(document.all) o = document.all.obj;
- return o;
- }
【代码解读】
其中,navigate()为入口函数,用来初始化AJAX应用,然后调用callback()函数将从xml.php获得的数据插入HTML代码中。
2.PHP日历文件
打开calendar.php文件之前,该文件完成了处理当前日期信息并生成日程表页面。下面对该文件进行改造。
(1)添加从数据库中获得信息内容,代码如下:
广州网站建设
- <?php
- $db = @mysql_connect($localhost,$user,$pwd) ; //数据库连接信息
- mysql_select_db('calendar'); //选择数据库
- $sql = "SELECT num,date FROM 'events' LIMIT 0 , 30 ";
- $result = mysql_query($sql);
- while ($rw = mysql_fetch_row($result)) {
- $links[]=$rw[1]; //将时间串取出存入数组
- }
- ?>
【代码解读】
以上的代码将数据库中的事件信息遍历出来,并处理成一个数组,便于下面生成日程表时做比对,同时请注意替换数据库链接信息。
(2)现在改造生成日程表部分的代码,同时在页面代码中引入AJAX的配置文件,用来处理提交的数据。
广州网站建设
- <script type="text/JavaScript" src="calendar.js"></script>
- <table width="400" border="1" cellpadding="2" cellspacing="2">
- <tr>
- <th colspan='7'>
- <?php echo date('M', mktime(0,0,0,$month,1,$year)).' '.$year;?>
- </th>
- </tr>
- <tr>
- <th>Sun</th>
- <th>Mon</th>
- <th>Tue</th>
- <th>Wed</th>
- <th>Thur</th>
- <th>Fri</th>
- <th>Sat</th>
- </tr>
- <?php
- foreach ($week as $key => $val) {
- echo "<tr>";
- for ($i=0;$i< 7;$i++) {
- //日期匹配
- if (in_array("2010-06-".$val[$i],$links)) {
- echo "<td align='center'>
- <a href='JavaScript:navigate(\"\",\"\",\"2010-06-".$val[$i]."\")'>Event </a>".$val[$i]."</td>";
- }else{
- echo "<td align='center'>".$val[$i]."</td>";
- }
- }
- echo "</tr>";}
- ?>
注意:当一个日期有提醒事件时,就需要在日程表格中加入一个提示标识并添加链接,通过in_arrary()就可以判断出来该日期是否在数组中,再通过if判断就可以加入事件标识了。
(3)在文件的底部加入一个空的表格用来获得数据库信息(生成HTML标签),代码如下:
广州网站建设
- <tr id="calback">
- <th id="calendar" colspan='7'>
- calendar
- </th>
- </tr>
- </table>
(4)至此,calendar.php的改造就完成了,在浏览器中运行该文件效果如图9.9所示。其中可以看到,在数据库设置事件的日期表格有"event"标识,并可以通过链接驱动AJAX文件。
![]() |
| 图9.9 PHP日程表 |




