迁移到 XML
第一种方式是使用 XML 作为您从服务器到客户端的传输语法。此处的想法是服务器提供一个通用 XML 端点,任何流程都可以使用该端点来执行查询,并且您的客户端足够智能,能够读取 XML 并以其想要的方式来格式化它。
要变成 XML,首先要创建如 清单 6 中所示的新服务器页面。
清单 6. XML Ajax 页面
<?php
include 'Simpsons.php';
header( 'Content-type: text/xml' );
$s = new Simpsons();
$doc = new DOMDocument();
$root = $doc->createElement( 'episodes' );
$doc->appendChild( $root );
foreach( $s->find( $_REQUEST['q'] ) as $episode ) {
$el = $doc->createElement( 'episode' );
$el->setAttribute( 'title', $episode['title'] );
$el->setAttribute( 'episode', $episode['episode'] );
$el->setAttribute( 'season', $episode['season'] );
$el->setAttribute( 'aired', $episode['aired'] );
$tn = $doc->createTextNode( $episode['summary'] );
$el->appendChild( $tn );
$root->appendChild( $el );
}
print $doc->saveXML();
?>
include 'Simpsons.php';
header( 'Content-type: text/xml' );
$s = new Simpsons();
$doc = new DOMDocument();
$root = $doc->createElement( 'episodes' );
$doc->appendChild( $root );
foreach( $s->find( $_REQUEST['q'] ) as $episode ) {
$el = $doc->createElement( 'episode' );
$el->setAttribute( 'title', $episode['title'] );
$el->setAttribute( 'episode', $episode['episode'] );
$el->setAttribute( 'season', $episode['season'] );
$el->setAttribute( 'aired', $episode['aired'] );
$tn = $doc->createTextNode( $episode['summary'] );
$el->appendChild( $tn );
$root->appendChild( $el );
}
print $doc->saveXML();
?>
虽然搜索仍然一样,但是您格式化结果的方式变了。现在,该代码创建了 XML 文档并将节点附加到其上,从而保存所有返回的数据。然后在脚本的末尾,它只是将 XML DOM 保存为字符串。请注意在脚本的顶部,在导出 XML 而非 HTML 时,还要将内容类型设置为文本/xml。
如果在您的 web 浏览器中导航到此页面,则您会看到类似 图 4 中的情况。
▲图4 XML 响应页面