PHP+XML+jQuery实现即时功能(1)

Google的即时功能是一种新的搜索增强功能,随着您的键入显示结果,它已经获得了众多瞩目,而且很容易明白这是为什么,这类即时功能的主要好处在于易于实现,尤其当您在使用jQuery等客户端工具时。在本文中,您要遵循构建简单搜索引擎的流程,而后再为该引擎构建即时搜索用户界面。这一切都始于获取搜索数据。

Google的即时功能是一种新的搜索增强功能,随着您的键入显示结果,它已经获得了众多瞩目,而且很容易明白这是为什么。获取结果所需做的全部工作就是键入。您无需按Enter键来查看结果,然后调整您的搜索并再次按Enter键。这都将随着您的键入而发生。如果您还没有这样做,请尝试一下。令人惊讶的是这么小的变化却能在可用性上产生如此大的差异。

这类即时功能的主要好处在于易于实现,尤其当您在使用jQuery等客户端工具时。在本文中,您要遵循构建简单搜索引擎的流程,而后再为该引擎构建即时搜索用户界面。这一切都始于获取搜索数据。

设置数据

对于本文,我决定搜索“辛普森一家”剧集。我创建一个包含所有 “辛普森一家” 剧集、标题、季数、集数、播放日期和每集摘要的 XML 文件(包括在源代码 下载 中)。您可以在清单 1中看到该XML的一部分。

 
 
  1. 清单1. XML数据源  
  2. <?xml version="1.0" encoding="UTF-8"?> 
  3. <episodes> 
  4.   <episode title='Simpsons Roasting on an Open Fire' episode='1' season='1'   
  5.   aired='17 December 1989'> 
  6.      Christmas seems doomed for the Simpson family when Homer receives no  
  7.     Christmas Bonus. Homer becomes a mall Santa Claus, hoping to make money and  
  8.     bring Marge, Bart, Lisa, and baby Maggie, a happy holiday.  
  9.   </episode> 
  10.    ...  
  11. </episodes> 

它实际上是一个非常大的文件,其大小约为840K。这应该不令人意外,因为 “辛普森一家” 已经播放了漫长的22年。接下来就是编写一个PHP类,可为您执行XML解析和搜索。这个类称为Simpsons,如清单 2中所示。

 
 
  1. 清单 2. Simpsons 搜索类  
  2. <?php 
  3. class Simpsons {  
  4.  private $episodes = array();  
  5.  public function __construct() {  
  6.    $xmlDoc = new DOMDocument();  
  7.    $xmlDoc->load("simpsons.xml");  
  8.  foreach ($xmlDoc->documentElement->childNodes as $episode)  
  9.    {  
  10.      if ( $episode->nodeType == 1 ) {  
  11.       $this->episodes []= array(   
  12.       'episode' => $episode->getAttribute( 'episode' ),  
  13.       'season' => $episode->getAttribute( 'season' ),  
  14.       'title' => $episode->getAttribute( 'title' ),  
  15.       'aired' => $episode->getAttribute( 'aired' ),  
  16.       'summary' => $episode->nodeValue );  
  17.      }  
  18.    }  
  19.  }  
  20.  public function find( $q ) {  
  21.    $found = array();  
  22.    $re = "/".$q."/i";  
  23.    foreach( $this->episodes as $episode ) {  
  24.      if ( preg_match( $re, $episode['summary'] ) ||   
  25.         preg_match( $re, $episode['title'] ) ) {  
  26.      $found []= $episode;  
  27.    }  
  28.    }  
  29.    return $found;  
  30.  }  
  31. }  
  32. ?> 

该类的构造函数使用对于PHP来说标准的XML DOM库读取剧集信息的XML文件。它迭代根节点的所有子节点并提取它们的季数、标题、播放日期和剧集属性,以及包含摘要的节点的文本。然后将所有数据作为一个哈希表附加到剧集数组,该数组是一个成员变量。

然后,find函数搜索剧集列表以便使用与标题和摘要匹配的简单正则表达式来查找匹配项。任何匹配的剧集都被附加到一个数组,然后返回给调用方。如果数组为空,则没有发现匹配项。

现在有了数据,下一步就是开始构建Ajax响应程序,您的即时UI将调用该响应程序来检索数据。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值