精通 Grails: 用 JSON 和 Ajax 实现异步 Grails
2009-10-26 00:00:00 来源:WEB开发网刷新浏览器,确认在提供一个目的地机场之后会显示超级链接,如图 6 所示:
图 6. 显示 Show Nearby Hotels 超级链接
图片看不清楚?请点击这里查看原图(大图)。
现在,需要创建 loadHotels() 函数。
进行 Ajax.Remote 调用
在 plan.gsp 中的脚本块中添加一个新函数,如清单 18 所示:
清单 18. 实现 loadHotels()
function loadHotels(){
var url = "${createLink(controller:'hotel', action:'near')}"
url += "?lat=" + airportMarkers[1].getLatLng().lat()
url += "&lng=" + airportMarkers[1].getLatLng().lng()
new Ajax.Request(url,{
onSuccess: function(req) { showHotels(req) },
onFailure: function(req) { displayError(req) }
})
}
在这里使用 Grails createLink 方法是安全的,因为当在服务器端呈现页面时,Hotel.near() 的 URL 的基本部分是不变的。可以使用客户端 JavaScript 将 URL 的动态部分附加上去,然后使用熟悉的 Prototype 调用发出 Ajax 请求。
处理错误
为了简单起见,我在 <g:formRemote> 调用中省略了错误处理。因为正在调用一个远程服务(尽管是通过一个本地控制器代理),所以提供某种反馈总比静默失败更好。将 displayError() 函数添加到 plan.gsp 中的脚本块中,如清单 19 所示:
赞助商链接