快速业务通道

精通Grails: 用JSON和Ajax实现异步Grails - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15
分附加上去,然后使用熟悉的 Prototype 调用发出 Ajax 请求。

处理错误

为了简单起见,我在 <g:formRemote> 调用中省略了错误处理。因为正在调用一个远程服务( 尽管是通过一个本地控制器代理),所以提供某种反馈总比静默失败更好。将 displayError() 函数添加 到 plan.gsp 中的脚本块中,如清单 19 所示:

清单 19. 实现 displayError()

function displayError(response){   var html = "response.status=" + response.status + "<br />"   html += "response.responseText=" + response.responseText + "<br />"   var hotels = document.getElementById("hotels")   hotels.innerHTML = html }

显然,这只是在 Show Nearby Hotels 链接下面的 hotels <div> 中应该正常显示结果的地方 显示错误。您正在将远程调用封装在一个服务器端控制器中,因此可以在这里加强错误处理。

将一个 hotels <div> 添加到前面添加的 hotels_link <div> 的下面,如清单 20 所示 :

清单 20. 添加 hotels <div>

<div id="search" style="width:25%; float:left"> <h1>Where to?</h1> <g:formRemote name="from_form" ... > <g:formRemote name="to_form" ...> <div id="hotels_link"></div> <div id="hotels"></div> </div>

您只需做一件事:添加一个函数,以便装载成功的 JSON 请求,并填充 hotels <div>。

处理成功

如清单 21 所示,最后一个函数以 Yahoo! 服务返回的 JSON 响应为参数,构建一个 HTML 列表,并 将它写到 hotels <div>:

清单 21. 实现 showHotels()

function showHotels(response){   var results = eval( ''('' + response.responseText + '')'')   var resultCount = 1 * results.ResultSet.totalResultsReturned   var html = "<ul>"   for(var i=0; i < resultCount; i++){    html += "<li>" + results.ResultSet.Result[i].Title + "<br />"    html += "Distance: " + results.ResultSet.Result[i].Distance + "<br  />"    html += "<hr />"    html += "</li>"   }   html += "</ul>"   var hotels = document.getElementById("hotels")   hotels.innerHTML = html }

最后一次刷新浏览器,并输入两个机场。屏幕看上去应该如 图 1 所示。

这个例子到此结束,希望您自己继续完善它。您可以使用另一个 GMarker 数组在地图中标出宾馆。您 也可以添加 Yahoo! 结果中的其他字段,例如电话号码和街道地址。此外,您还可以进行其他实践。

结束语

只有大约 150 行代码,还不错吧?在本文中,您看到了在发出 Ajax 请求时,JSON 如何有效替代 XML。您看到了从本地 Grails 应用???序返回 JSON 是多么容易,并且从远程 Web 服务返回 JSON 也不 是很难。当在服务器端呈现 HTML 时,可以使用 Grails 标记,比如 <g:formRemote> 和 <g:linkRemote>。但是,知道如何使用 Prototype 提供的底层 Ajax.Request 调用对于真正动态 的 Web 2.0 应用程序是很关键的。

下一次,您将看到 Grails 的本地 Java Management Extensions(JMX)功能的应用。到那时,就可 以尽情享受精通 Grails 带来的乐趣!

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号