make控制器根据请求类型返回HTML或JSON

时间:2014-08-26 02:58:22

标签: ajax grails controller action

我想知道Grails是否有办法返回HTML或JSON,具体取决于我是对某个动作进行GET还是只是通过Ajax调用一个动作。

例如,如果我对“控制器/操作”进行Ajax调用,是否有办法返回JSON,如果我通过链接转到相同的“控制器/操作”,则使其呈现HTML页面?或者我必须定义两种不同的行为?

3 个答案:

答案 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代码。