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

迁移到XML

第一种方式是使用XML作为您从服务器到客户端的传输语法。此处的想法是服务器提供一个通用XML端点,任何流程都可以使用该端点来执行查询,并且您的客户端足够智能,能够读取XML并以其想要的方式来格式化它。

要变成XML,首先要创建如清单 6中所示的新服务器页面。

 
 
  1. 清单6. XML Ajax页面  
  2. <?php 
  3. include 'Simpsons.php';  
  4.  
  5. header( 'Content-type: text/xml' );  
  6.  
  7. $s = new Simpsons();  
  8. $doc = new DOMDocument();  
  9. $root = $doc->createElement( 'episodes' );  
  10. $doc->appendChild( $root );  
  11. foreach( $s->find( $_REQUEST['q'] ) as $episode ) {  
  12.    $el = $doc->createElement( 'episode' );  
  13.    $el->setAttribute( 'title', $episode['title'] );  
  14.    $el->setAttribute( 'episode', $episode['episode'] );  
  15.    $el->setAttribute( 'season', $episode['season'] );  
  16.    $el->setAttribute( 'aired', $episode['aired'] );  
  17.  
  18.    $tn = $doc->createTextNode( $episode['summary'] );  
  19.    $el->appendChild( $tn );  
  20.  
  21.    $root->appendChild( $el );  
  22. }  
  23. print $doc->saveXML();  
  24. ?> 

虽然搜索仍然一样,但是您格式化结果的方式变了。现在,该代码创建了XML文档并将节点附加到其上,从而保存所有返回的数据。然后在脚本的末尾,它只是将XML DOM保存为字符串。请注意在脚本的顶部,在导出XML而非HTML时,还要将内容类型设置为文本/xml。

如果在您的Web浏览器中导航到此页面,则您会看到类似图 4中的情况。

不过,一些浏览器可能以更结构化的方式显示已返回的文本。如果您想查看原始的源XML,则您可以选择View - Source以便看到类似图 5中的窗口。

如您所见,该脚本创建了一些良好格式化的XML,准备好供新的客户端代码使用。

解析XML(而不是直接使用 HTML)的新客户端代码位于清单 7中。

 
 
  1. 清单 7. 使用 XML 的即时搜索页面  
  2. <html><head> 
  3. <script src="jquery-1.4.2.min.js"></script> 
  4. <link rel="stylesheet" href="styles.css" type="text/css" /> 
  5. <title>Instant Search - XML Based</title> 
  6. </head> 
  7. <body> 
  8. Simpsons Search: <input type="text" id="term" /> 
  9. <table id="results"> 
  10. </table> 
  11. <script> 
  12. $(document).ready( function() {  
  13. $('#term').keyup( function() {  
  14.  $.get('search_xml.php?q='+escape($('#term').val()), function(data) {  
  15. html = '<table id="results">';  
  16. $(data).find('episode').each( function() {  
  17.      var ep = $(this);  
  18.          html += '<tr><td class="episode"><b>'+  
  19.          ep.attr('title')+'</b>&nbsp;';  
  20.          html += 'Season '+ep.attr('season')+'&nbsp;';  
  21.          html += 'Episode '+ep.attr('episode')+'&nbsp;';  
  22.          html += 'Aired '+ep.attr('aired')+'</td></tr>';  
  23.          html += '<tr><td class="summary">'+  
  24.          ep.text()+'</td></tr>';  
  25.    } );  
  26.    html += '</html>';  
  27.    $('#results').replaceWith( html );  
  28.  } );  
  29. } );  
  30. } );  
  31. </script> 
  32. </body> 
  33. </html> 

用于监控击键和发出Ajax请求的客户端代码几乎完全一样。所不同的是不同的URL获取XML数据而不是HTML数据。

在数据返回以后,该代码使用jQuery来寻找所有剧集标签。然后它可格式化大量XML并使用replaceWith函数来用新表替换旧表。由于使用了jQuery,此代码比在使用浏览器的原生 DOM 功能时更容易使用。

传输数据的另一种方式是通过JSON(JavaScript对象符号)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值