我想知道Grails是否有办法返回HTML或JSON,具体取决于我是对某个动作进行GET还是只是通过Ajax调用一个动作。
例如,如果我对“控制器/操作”进行Ajax调用,是否有办法返回JSON,如果我通过链接转到相同的“控制器/操作”,则使其呈现HTML页面?或者我必须定义两种不同的行为?
答案 0 :(得分:1)
通常,所有AJAX请求都设置了X-Requested-With
标头。您可以检查是否设置了此标头并呈现所需的响应格式:
if (request.getHeader('X-Requested-With')) {
// render response as JSON
} else {
// render HTML page
}
或者(正如Martin Hauner在评论中指出的那样)使用基本相同的request.xhr
属性,如果当前请求是AJAX,则返回true
:
if (request.xhr) {
// render response as JSON
} else {
// render HTML page
}
request
是表示当前请求的对象。 Read more about it in Grails documentation.
答案 1 :(得分:1)
withFormat建设者随时为您提供帮助:
class BookController {
def list() {
def books = Book.list()
withFormat {
html bookList:books
js { render books as JSON }
xml { render books as XML }
}
}
}
答案 2 :(得分:0)
是的可能,
如果您在控制器中使用
if(isset($_post) || isset(#_get)){
//if something is posted then this should execute
}
else
{
//this portion should execute..
}
它是一个粗略的代码,可能是一些错误,但你明白了......
您的Ajax Call将根据类型发布数据
你的Ajax中有type:"POST"
或type:"GET"
..
你可以在控制器中获得。如果控制器发现有事情发布,那么控制器将相应地采取行动。
或者,如果没有发布您要查找的内容,请让控制器发送HTML代码。