网络编程
位置:首页>> 网络编程>> JavaScript>> 基于AJAX技术提高搜索引擎排名(4)

基于AJAX技术提高搜索引擎排名(4)

作者:朱先忠编译 来源:天极开发 发布时间:2008-01-24 12:45:00 

标签:排名,ajax,搜索

四、使用XmlHttpRequest


如果你的用户主要使用Internet Explorer的较新版本或基于Gecko的浏览器(Mozilla,Firefox,Netscape 7),那么你可以决定使用XmlHttpRequest对象来把其它内容下载到你的web页面中。第一步非常类似于前面描述的方式。对于每一个占位符,你需要一个JavaScript函数调用来启动加载过程:


<div id="header">
<div style="height: 100px; width: 100%"></div>
<script>loadContent("header","/navigation/header.html")</script>
</div>

然而,loadContent函数是根本不同的:它创建了一个新的XmlHttpRequest对象,然后把一个事件处理器指派给它,并且异步启动装载过程:




function loadContent(id,url) {
 try {
  var rq = new XMLHttpRequest() ;
  rq.open("GET", url, true);
  rq.onreadystatechange = function() { contentLoaded(rq,url,id) }
  rq.send(null);
 } catch (err) {
  alert("cannot load "+url+" into "+id) ;
 }

注意

每一种主流浏览器家族都以一种不同的方式实现了XmlHttpRequest对象。处理这种兼容性问题的最容易的方法是,使用一个包装器库,例如Sarissa。我们在本文中示例中就使用了这种库。


回调函数contentLoaded负责检查XmlHttpRequest对象是否已经准备好及完成状态(如果请求已完成的话),并且从响应中提取HTML标记。提取HTML代码(除非你使用XHTML,这种情况下,你可以使用XMLDOM接口)的最容易的方法是,使用字符串处理函数来查找<body>和</body>标志之间的文本:



function contentLoaded(rq,url,id) {
 try {
  if (rq.readyState != 4) { return; }
  if (rq.status != 200) { alert("failed to load "+url); return; }
  var txt = rq.responseText ;
  //查找<body>标记的开始位置
  var startBodyTag = txt.indexOf("<body")
  //查找<body>标记的结束,跳过任何属性
  var endOfStartTag = txt.indexOf(">",startBodyTag+1)
  //查找</body>标记
  var endBodyTag = txt.indexOf("</body")
  if (endBodyTag == -1) { endBodyTag = txt.length ; }
  //提取实际内容
  var bodyContent = txt.substring(endOfStartTag+1,endBodyTag) 
  if (bodyContent) {
   var placeholder = document.getElementById(id) ;
   placeholder.innerHTML = bodyContent;
  }
 } catch (err) {
  alert("cannot load "+url+" into "+id) ;
 }

与前面描述的基于IFRAME的方法相比,使用XmlHttpRequest对象具有下列好处:


·代码更干净,并且不依赖于页面的上下文切换。

·XmlHttpRequest对象使你能够检测和处理错误(通过它的readyState和status属性)。而使用IFRAME加载内容时,如果出现错误,则只能显示非常粗略的错误提示,这主要是因为缺乏对回调函数的调用。


·你能够实现内容元素的平行装载(如在这一节中显示的)或顺序化装载请求以最小化带宽利用。

五、小结

在本文中,你学习了怎样实现把你的web页面内容与包围该内容的可导航元素分离开来。分离导致更为集中地描述搜索引擎要搜索的页面内容,并且也减少了用户使用低速互联网存取的加载时间(既然是在可导航元素被下载之前把实际内容显示给用户)。


当重新设计你的web页面来利用这种方案时,切记,一些基本格式的导航必须保留在页面上以便允许搜索引擎和决定禁止使用JavaScript的用户在你的网站的页面之间进行导航。

你可以使用嵌入式框架(IFRAME)或使用在最现代浏览器中实现的XmlHttpRequest对象来实现可导航元素的延迟装载。IFRAME方法能够为较老式的浏览器所支持;因此,它可能是你要考虑使用的方法-如果你非常关心向后兼容问题的话。另一方面,XmlHttpRequest对象的使用使你能够更为紧密地控制装载过程并能够检测和处理下载错误。

0
投稿

猜你喜欢

  • 引言最常见的闭包 (Closure) 范式大家都很熟悉了:(function() {// ...})(); 很
  • 来炫耀一下,谁看得懂我写的加密算法写了一整天了,这个代码用于ajax提交,要求就是加密后内容不能变得过长,加密解密需要效率高,至于安全性,被
  • 在上一篇文章中 ,我说到:强硬的把CSS和HTML塞到PHP里面可以防止代码太枯燥(DRY)并最终导致代码臃肿,因为的CSS和HTML需要比
  • 信息图表设计(Inforgraphic Design),是信息设计(Information Design)学科的一个分支,它兴起于20世纪末
  • Cookie简介首先,我们对Cookie做一个简单的介绍,说明如何利用ASP来维护cookie。Cookie是存储在客户端计算机中的一个小文
  • 在设计网页之前,客户或产品经理会提出对网页视觉风格设计的期望:活跃、大气、稳重、信赖、都市化….. 设计师一听到关键词或许很自然地在心里蹦出
  • 近来在做数据库设计,有时候真弄不清SQL2000里的数据类型,所以摘了这篇文章。 (1)char、varchar、text和nchar、nv
  • 当用户关闭cookie时,通过asp程序提示访客打开,源代码如下:   Dim strCookie, strT
  • 在默认情况下,Access 2000/2002数据库是以“共享”的方式打开的,这样可以保证多人能够同时使用同一个数据库。不过,在共享方式打开
  • 当你在IE中点击一个Realplayer连接时,系统会自动启动Realplayer软件,不仅占用系统内存,而且在上网时Realplayer容
  • 概要:Oracle关系数据库系统以其卓越的性能获得了广泛的应用,而保证数据库的安全性 是数据库管理工作的重要内容。本文是笔者在总结Oracl
  • 1:下载FCKEditor编辑器下载下来后解压到你网站的目录,最好就放在根目录下,文件夹名字就用FCKEditor;这里可以随便自己喜好,但
  • 在获得SA密码后,往往因为服务器管理者或”前人”将net.exe和net1.exe被限制使用,无法添
  •  游戏说明:一个考验您记忆力的游戏,只要两个方块的;图案能够凑成一对,最终翻开所有的图片,那么您就获胜,计算机将自动记录您的游戏时
  • 来自Usability Post的Categories vs Tags作者认为“就博客而言,标签没有太大意义。”I don’t think
  • li {list-style-image: url(images/disc.gif);}li的这个样式定义是将列表项目使用图片来代替显示的小
  • 以下示例显示如何在 XPath 查询中指定轴。这些示例中的 XPath 查询都在 SampleSchema1.xml 中所包含的映射架构上指
  • 1、注册时验证数据库用户名是否存在。 2、输入密码时提示密码强度和验证2次密码输入是否一样。 3、注册时验证数据库联系邮箱是否存在。 4、注
  • 二是什么时候CPU是空闲的?空闲是一个相对的标准。有时会CPU使用率30%以下可以定义为空闲;而有时候CPU使用率只有不到60%,就是空闲。
  • 优秀的Stoyan Stefanov在他的新书中(《Javascript Patterns》)介绍了很多编写高质量代码的技巧,比如避免使用全
手机版 网络编程 asp之家 www.aspxhome.com