发 出异步请求并不意味着只是与您自己的服务器端程序交互。其实也可以与一些公共 API,例如来自 Google 或 Amazon 的 API 进行通信,从而为 Web 应用程序增加您自己的脚本和服务器端程序所不能提供的更多功能。在本文中,Brett McLaughlin 教您如何向公共 API,例如 Google 提供的 API 发出请求并接收其响应。
到目前为止,这个系列只涉及到客户机 Web 页面向服务器端脚本和程序发出请求的情况。这就是大约 80% 到 90% 的 Ajax 应用程序(使用 XMLHttpRequest 对象的异步 Web 应用程序)的工作方式。然而,这种方法有很严重的局限性:您将受到自己才智和编程技能的限制,就算不是这样,最起码也要受到公司团队中的程序员的才智和编程技能的限制。
很 多时候,您会遇到非技术问题。您不需要帮助也能编写某个脚本或某段代码,然而,手头上却没有所需的数据或资源。在这些情况下,即使有了教程或者开放源码脚 本,也还需要更多的东西。例如,考虑在 Web 页面上增加一个搜索引擎的情况。这样做的前提是您已经有了要搜索的数据 -- 但是,如果要搜索您公司或组织以外的数据,那么该怎么办呢?
如果不是因为技术上的原因,而是因为数据而受到限制,那么,一个公共 API 也许可以帮助您解决问题。公共 API 允许使用其他人的服务器上的程序并使用其他人的数据。通常,API 本身只定义如何与该程序交互。例如,通过一个用于 Google 搜索引擎的公共 API 可以发出搜索请求,但是实际上是由 Google 的代码搜索 Google 的数据,然后将结果返回给您的程序。您不仅可以利用他人在编写这些程序方面的技能,还可以利用远远超过您自己公司所能支持的数据。
毋 庸置疑,Google 仍然是在线时代极其重要的应用。上至老奶奶,下至四岁小孩,即使不理解网上的其它东西是怎么回事,也一定知道 Google。Google 运行着如此流行、如此有用的搜索引擎,并且致力于提供(几乎全部)免费的服务,所以毫不奇怪,它能提供可以在您自己的程序中使用的公共 API。在本节中,您将完成使用 Google API 的准备工作,并清楚地了解如何与 Google 进行异步应用程序会话。
在开始使用获得的密钥之前,要花点时间阅读一下 Google 的 API 文档(在提供密钥的页面的底端有一个链接,本文的参考资料中也提供了该链接)。即使您通过本文有了很好的初步认识,仍然会发现 Google 的 API 文档是一个很好的参考资料,通过该文档可能会得到关于如何在您自己特有的应用程序中、站点上使用 Google 的一些有趣的想法。
<html> <head> <title>My Google AJAX Search API Application</title> <link href="http://www.google.com/uds/css/gsearch.css" type="text/css" rel="stylesheet" /> <script src="http://www.google.com/uds/api?file=uds.js&v=1.0&key= YOUR KEY HERE " type="text/javascript"> </script> <script language="Javascript" type="text/javascript"> function OnLoad() { // Create the Google search control var searchControl = new GSearchControl();
// These allow you to customize what appears in the search results var localSearch = new GlocalSearch(); searchControl.addSearcher(localSearch); searchControl.addSearcher(new GwebSearch()); searchControl.addSearcher(new GvideoSearch()); searchControl.addSearcher(new GblogSearch());
// Tell Google your location to base searches around localSearch.setCenterPoint("Dallas, TX");
// "Draw" the control on the HTML form searchControl.draw(document.getElementById("searchcontrol")); } </script> </head>
function OnLoad() { // Create the Google search control var searchControl = new GSearchControl();
// These allow you to customize what appears in the search results var localSearch = new GlocalSearch(); searchControl.addSearcher(localSearch); searchControl.addSearcher(new GwebSearch()); searchControl.addSearcher(new GvideoSearch()); searchControl.addSearcher(new GblogSearch());
// Tell Google your location to base searches around localSearch.setCenterPoint("Dallas, TX");
// "Draw" the control on the HTML form searchControl.draw(document.getElementById("searchcontrol"));
function OnLoad() { // Create the Google search control var searchControl = new GSearchControl();
// These allow you to customize what appears in the search results var localSearch = new GlocalSearch(); searchControl.addSearcher(localSearch); searchControl.addSearcher(new GwebSearch()); searchControl.addSearcher(new GvideoSearch()); searchControl.addSearcher(new GblogSearch());
// Tell Google your location to base searches around localSearch.setCenterPoint("Dallas, TX");
... }
其中大部分搜索类型都可以查阅到,以下是一个简短的总结:
GwebSearch:该对象用于搜索 Web,这是 Google 最著名的一种搜索。
GvideoSearch:该对象查找与搜索词相关的视频。
GblogSearch:该对象专门搜索博客,博客的结构和标记与其它 Web 内容类型有所不同。
您已经了解如何预先装载特定的搜索。然后,剩下的只有 draw() 方法调用了,如清单 6 所示。您为该方法调用提供了 HTML 中的一个 DOM 元素(如果想回顾关于 DOM 的内容,请参阅 参考资料 中本系列的前几篇文章)。然后,这个控件将魔术般地出现在窗体上,供用户使用。
function OnLoad() { // Create the Google search control var searchControl = new GSearchControl();
// These allow you to customize what appears in the search results var localSearch = new GlocalSearch(); searchControl.addSearcher(localSearch); searchControl.addSearcher(new GwebSearch()); searchControl.addSearcher(new GvideoSearch()); searchControl.addSearcher(new GblogSearch());
// Tell Google your location to base searches around localSearch.setCenterPoint("Dallas, TX");
// "Draw" the control on the HTML form searchControl.draw(document.getElementById("searchcontrol"));
Google 的 JavaScript 并不太容易理解。首先,uds.js JavaScript 文件找到一些本地设置,处理一些 Google 特有的任务,验证您的 Google 密钥,然后装载另外两 个脚本:http://www.google.com/uds/js/locale/en/uistrings.js 和 http://www.google.com/uds/js/uds_compiled.js。如果有兴趣的话,您可以找出并仔细理解这两个文件,但是要 注意:完全理解先进的代码是很困难的,而且其格式令人生畏!对于大部分人来说,只需知道如何使用这些文件,而不必理解其中每一行的意义。
至此,就该由您来完成这些步骤,并应用于您自己的应用程序。最简单的应用是,将一个 div 拖入 Web 页面,并将 清单 1 中显示的 JavaScript 添加到 Web 页面中;然后就可以使用 Google 搜索了。
但 是,有趣的事情不止于此。不必局限于这组特定的选项或控件。可以围绕 Web 结果、博客结果和视频结果做文章,合适的话,可以将每种结果集成到 Web 应用程序中。例如,可以提供多个搜索控件,每个搜索控件专门用于搜索一种类型的结果。还可以将 Google 搜索控件包括在一个 span 元素中,放在其余的应用程序内容的中间,而不是放在侧面的一个 div 中。不管那种情况,都应该确信,Google 的搜索是为您的需求而打造的,而不应该修改您自己的应用程序来适应 Google。
以 本文学到的知识为基础,将 Google 搜索框和其他 Google API 应用到您自己的 Ajax 应用程序中,这应该不难。然而,更重要的是,您应该明白如何使用公共 API。例如,Amazon.com 也提供了一个公共 API,通过它可以对书籍和 Amazon 的其它商品执行同样的 Web 搜索。您可以着手寻找自己喜欢的公共 API,从而超越自己编程技能的限制。实际上,很容易创建一个集成了 Google、Amazon.com、Flickr 等内容的站点。
虽然弄清楚如何使用 Google 比较重要(因为 Google 提供了良好搜索算法和海量的数据存储),但更 重要的是学习如何使用任意的 公共 API。还应该开始转变观念,不要再将自己的应用程序看作自我编程技能的总和;相反,它可以是通向各种数据的一个大门。而这些数据可能存储在 Google、Amazon.com、del.icio.us 的服务器上或者其他任何地方。在这些数据的基础上,添加您自己的业务或项目内容,就可以得到非常强大、非常健壮的解决方案,这远远超过您自己编写的作品。