Ajax in Google Pages

Posted @ 12:57 AM on September 24, 2006 by Denis

      Google Pages 确实好用,而且提供很多的模版,可以很快就建立一个比较漂亮的网站,不过其面向的是初级的用户,不需要知道太多网页编程,所以一些比较实用的功能并不能实现。比如就不能象 PHP 一样通过include 一个文件来实现保持导航栏的一致性。如果每次都是手工来增加,这样第一很不方便,而且很容易出错。后来看到 Google Pages 完全支持Javascript 之后,这几天,正在学习 Ajax,于是想是否可以利用 Ajax 的一些最基本的原理来实现导航栏的一致性,通过实验发现完全可以!下面我就谈谈我实现的过程,希望对您在使用 Google Pages 中能够有一些帮助。

      第一步:在本地制作导航文件,命名为NAV,其大概的格式如下:

主页

我的相册

我的CD

我的简历

联系方式

友情链接

其实就是一个很简单的导航文件。非常简单,这里就不详讲了。制作好之后就上传到 Google Pages。

      第二步,创建NAV.JS文件。


var xmlHttp; /*XMLHttpRequest对象 */
function createXMLHttpRequest(){
if (window.ActiveXObject){ /*在IE下初始化XMLHttpRequest对象 */
xmlHttp = new ActiveXObject(”Microsoft.XMLHTTP”)
}
else if(window.XMLHttpRequest){ /*在Firefox下初始化XMLHttpRequest对象 */
xmlHttp = new XMLHttpRequest();
}
}

function startRequest(){
createXMLHttpRequest();
xmlHttp.onreadystatechange = handleStateChange; /* 设置回调函数为handleStateChange. */
xmlHttp.open(”GET”, “nav”, true); /*通过get方法来请求目标NAV,并且设置为异步完成请求*/
xmlHttp.send(null);
}

function handleStateChange(){ /*XMLHttpRequest对象内部状态每次有变化时候都会调用 handleStateChange 函数。*/
if (xmlHttp.readyState == 4 ){ /*请求完成*/
if (xmlHttp.status == 200 ){ /*服务器的HTTP状态为200,既OK */
document.getElementById(”g_description”).innerHTML = “

邓鸿华的个人主页

“;
document.getElementById(”nav”).innerHTML = xmlHttp.responseText;
document.getElementById(”g_footer”).innerHTML = ‘

Copyright © 2006/7/8 ~ 保留部分权利

‘;
}
}
}

window.onload = function (){
startRequest();
}

这个是最基本的AJAX语句过程。完整的解释可以参考《Foundations of Ajax》这本书。

      第三步,当你创建每个Google Pages时,在左边(或者右边的导航栏)加上以下的HTML代码,

/* 在导航文件没有被导入之前显示红色 Loading… 效果 */

/*调用先前的JS文件*/
/*加在导航栏的其他代码*/

      以上三步就是利用Ajax原理实现在 Google Pages 在保持导航栏内容一致的方法,最主要在于利用NAV.JS中最后onload调用startRequest函数来异步调用NAV文件内容作为导航栏的内容,并且同时修改副标题和页脚。这样子最大的好处,如果导航文件需要修改,只要修改Nav文件就可以了。

      PS:另外也可以通过Javascript LoadXML来实现以上功能,具体如下,没有具体测试过,个人更喜欢用Ajax方法。

var xmlDoc;

function loadXML(){
//load xml file
// code for IE
if (window.ActiveXObject)
{
xmlDoc=new ActiveXObject(”Microsoft.XMLDOM”);
xmlDoc.async=false;
xmlDoc.load(”NAV.XML”);
}
// code for Mozilla, Firefox, Opera, etc.
else if (document.implementation && document.implementation.createDocument)
{
xmlDoc=document.implementation.createDocument(”",”",null);
xmlDoc.load(”NAV.XML”);
}
else
{
alert(’Your browser cannot handle this script’);
}
}

function getNav(){
loadXML();

var out = “”;

var items = xmlDoc.getElementsByTagName(”item”);

var currentItem = “”;

for (var i=0; i currentItem = items[i];

var itemTitle = currentItem.getElementsByTagName("title")[0].childNodes[0].nodeValue;
var itemLink = currentItem.getElementsByTagName("Link")[0].childNodes[0].nodeValue;

out += "

” + itemTitle + “

“;
}

document.getElementById(”NAV”) = out;

}

window.onload = function (){
getNav();
}

其中NAV.XML文件为:


LoadXML的方法我没有经过完整测试,可能还存在一些问题。如果有问题请您告诉我。

What Is Your Comment?


* = required