精通Grails: 用JSON和Ajax实现异步Grails - 编程入门网
tel&tp=1",
"Result":[
{"id":"42712564",
"Title":"Springhill Suites-Denver Arprt",
"Address":"18350 E 68th Ave",
"City":"Denver",
"State":"CO",
"Phone":"(303) 371-9400",
"Latitude":"39.82076",
"Longitude":"-104.673719",
"Distance":"2.63",
[SNIP]
现在,您有了一个可用的宾馆列表,接下来需要为其创建一个控制器方法,就像为 AirportMapping.iata() 创建该方法一样。 创建用于发出远程 JSON 请求的控制器方法 在本文的前面,您已经创建了一个 HotelController。将清单 15 中的 near 闭包添加到其中。(您 在 “Grails 服务和 Google 地图” 中已经看到了类似的代码)。 清单 15. HotelController
精通Grails: 用JSON和Ajax实现异步Grails(10)时间:2011-08-02 IBM Scott Davis所有查询字符串参数都是硬编码的,但最后两个除外:latitude 和 longitude。倒数第二行实例化一 个新的 java.net.URL。最后一行调用服务(url.text),并呈现结果。由于没有使用 JSON 转换器,因 此必须显式地将 MIME-type 设置为 application/json。除非特意设置,否则 render 会返回 text/plain。 在浏览器中输入下面的内容(不要换行):
将结果与前面直接调用 http://local.yahooapis.com 的结果相比,两者应该是相同的。 为什么不能直接从浏览器远程调用 Web 服务? 如果将 local.yahooapis.com URL 插入到一个 Ajax.Request 中,它将静默失败。如果将它输入到浏 览器的地址栏,它将会成功,但是编程式地从 JavaScript 中调用它时,就会再次失败。这是一个特有的 现象,而不是存在 bug。 具体而言,Ajax 请求要遵循同源(same source 或 same origin)规则。这意味着 Ajax 请求只能回 到源 HTML 页面所在的同一个字段。在您的例子中,可以任意调用 http://localhost,但是 http://local.yahooapis.com 或其他地方是不能调用的。 这样做是出于安全考虑。当您在 http://amazon.com 中输入信用卡号时,一定希望确保那些数字不会 同时被悄悄地发送到 http://hackers.r.us。(更正式的说法是 XSS 或跨站点脚本)。 同源规则仅适用于客户端 JavaScript,而不适用于服务器端 Groovy。因此我让您通过一个控制器代 理对 http://local.yahooapis.com 调用,并透明地将它传回浏览器。 如果确实想从浏览器调用 Yahoo! 或 Google Web 服务,两者都会通过提供回调选项以巧妙的方法规 避了同源规则。 使用控制器可以让远程 JSON 请求带来两个好处:可以规避同源 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |