精通 Grails: 用 JSON 和 Ajax 实现异步 Grails
2009-10-26 00:00:00 来源:WEB开发网现在,您有了一个可用的宾馆列表,接下来需要为其创建一个控制器方法,就像为 AirportMapping.iata() 创建该方法一样。
创建用于发出远程 JSON 请求的控制器方法
在本文的前面,您已经创建了一个 HotelController。将清单 15 中的 near 闭包添加到其中。(您在 “Grails 服务和 Google 地图” 中已经看到了类似的代码)。
清单 15. HotelController
class HotelController {
def scaffold = Hotel
def near = {
def addr = "http://local.yahooapis.com/LocalSearchService/V3/localSearch?"
def qs = []
qs << "appid=YahooDemo"
qs << "query=hotel"
qs << "sort=distance"
qs << "output=json"
qs << "latitude=${params.lat}"
qs << "longitude=${params.lng}"
def url = new URL(addr + qs.join("&"))
render(contentType:"application/json", text:"${url.text}")
}
}
所有查询字符串参数都是硬编码的,但最后两个除外:latitude 和 longitude。倒数第二行实例化一个新的 java.net.URL。最后一行调用服务(url.text),并呈现结果。由于没有使用 JSON 转换器,因此必须显式地将 MIME-type 设置为 application/json。除非特意设置,否则 render 会返回 text/plain。
在浏览器中输入下面的内容(不要换行):
http://localhost:9090/trip/hotel/near?lat=
39.858409881591797&lng=-104.666999816894531
赞助商链接