静态页面使用Ajax

其实Ajax技术并不是只有那些动态页面可以使用,在静态页面里也可以有很大用处,当然,这里面只牵涉到了静态xml文件,而不可能是动态生成的了。

在我的页面里,由于主要是放些文章,是采用的这样的方法,xml文件的结构是:<solrex_shuffling>
<article>
<title><![CDATA[]]></title>
<info><![CDATA[]]></info>
<content><![CDATA[]]></content>
</article>
</solrex_shuffling>

把所有的文章都放到一个xml文档里,用CSS控制显示格式,用Ajax技术控制显示内容。本来是想一下子读取出来所有的节点内容,放到变量里,这样使用起来就不用再去访问服务器了。对于小型的应用,这样做是可以的,但是对于像文章这种长字符串存储到变量里是不可行的。这样就只好使用一个笨方法,每次去request这个xml文件,使用全局变量来控制取出的内容。

IE和Firefox在这方面又表现出了不同,当把xml文件取回来的以后,IE就不会去再访问服务器了,只使用缓存里的文件,速度比较快。但是Firefox是会再去访问,取回最新的文件。其实可以对文件的访问进行控制,让浏览器只访问更新的文件,但是这又得是服务器端和网页程序配合下才可以,对于静态页面来说,就不用考虑那么多了,如果访问量在一定范围内的话,其实速度还是可以的。而且Firefox可以在本地执行request,不需要访问服务器,而IE就不行。

IE和Firefox在处理xml内容的时候也会有不同,例如取出底层节点内部文本的时候,IE是用node.text,而Firefox是用node.textContent。我不知道有没有一个统一的接口,我是在调试JS代码的过程中发现的这两个不同,就用我自己的方法实现了,很简单,先判断节点具有不具有node.textContent属性,具有就采用Firefox处理方式,不具有就用IE的处理方式。

还有值得注意的是,Firefox会把xml中两个标签之间的空格和换行符当作是一个节点,而IE不会,所以为了通用性考虑,xml中的标签之间尽量不留空,不要像HTML编程一样为了看清楚格式放很多空白字符。

在节点内部使用<![CDATA[]]>是为了能不让解析器解析里面的内容,比如HTML格式的文本。

在编码过程中我还发现,用Object.innerHTML写入的内容仍然可以被getElementById()方法访问,这样就说明是可以循环嵌套写入代码了。

Sam Stephenson的Prototype JavaScript framework对JS和Ajax开发都是很有帮助的,利用它可以节约很多劳动。

做完以后发现,只用一个htm文件和一些xml文件就可以显示非常丰富的内容,用起来非常舒服。但是发现在我电脑上的本地服务器运行得好好的,上传到googlepage却没办法运行,猜想可能是google禁用了一些javascript脚本。反正至少在google提供的在线HTML编辑的话,一些JS代码是不能用的。
Copyright © 2005-2006 Solrex Yang. All rights reserved.

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注