我正在尝试从控制器操作返回JSON。这是我的行动方法
import grails.converters.JSON
....
def getDoctorList(id){
def serviceNo = id ?: "1"
def service = ServicePoint.findByNumber(serviceNo)
def jsonMap=service?.staff.collect{
[id: it.id , name: it.firstName +" "+ it.lastName]
}
render jsonMap as JSON
}
如果我在最后一行将jsonMap转换为JSON,我的页面将不会被呈现,如果我删除了JSON页面呈现并且一切正常。这段代码有什么问题?
=============================================== ==================================
我不需要渲染一个gsp页面,我需要将地图渲染为json,以便在填充gsp页面中的下拉框时使用它。现在,当我在代码中使用(作为JSON)时,不会显示由ajax呈现的页面。如果我删除它一切正常。
答案 0 :(得分:1)
通过渲染JSON,您无法渲染与该操作关联的模板。如果我假设约定并且你有一个getDoctorList.gsp,那么下面的代码将起作用:
def getDoctorList(id){
//.. logic here
// leaving no render method will default to convention
// rendering getDoctorList.gsp
}
def getDoctorList(id){
//.. logic here
// supplying a render with a view will render that view
render view: 'doctor_list' // assumes doctor_list.gsp
}
def getDoctorList(id){
//.. logic here
// Rendering JSON will not use a template at all
render jsonMap as JSON
}
这可行,但我怀疑这是你想要的:
def getDoctorList(id){
//.. logic here
[jsonMap: jsonMap as JSON]
}
这会将jsonMap作为请求参数推送到getDoctorList.gsp。一般来说,渲染JSON数据通常是对ajax请求的响应。
答案 1 :(得分:0)
不是render jsonMap as JSON
,而是return jsonMap as JSON
。在第一种情况下,您在text/html
标题中返回Content-type
,return
Grails将其设置为application/json
。