根据请求类型使控制器返回HTML或JSON(make controller return HTML

2019-10-20 18:35发布

我想知道是否有Grails中的方式返回HTML或JSON或取决于如果我做一个GET到一个动作,如果我只是呼吁通过Ajax的动作。

举例来说,如果我做一个Ajax调用“控制器/动作”,有没有办法回到JSON,如果我去同“控制器/动作”槽的链接,使其呈现一个HTML页面? 或者我必须定义两个diferent行动?

Answer 1:

通常,所有的AJAX请求具有X-Requested-With首部集。 您可以检查这个头设置和渲染响应所需的格式:

if (request.getHeader('X-Requested-With')) {
    // render response as JSON
} else {
    // render HTML page
}

或(如马丁·豪纳在评论中指出)使用request.xhr里面做基本相同,并返回属性true ,如果当前请求是一个AJAX:

if (request.xhr) {
    // render response as JSON
} else {
    // render HTML page
}

request是表示当前请求的对象。 了解更多关于它的Grails文档。



Answer 2:

在withFormat建设者在这里帮助:

class BookController {

  def list() {
    def books = Book.list()

    withFormat {
        html bookList:books
        js { render books as JSON }
        xml { render books as XML }
    }
  }
}


Answer 3:

是它的可能,

如果您在控制器difine

if(isset($_post) || isset(#_get)){
//if something is posted then this should execute
}
else
{
//this portion should execute..
}

它的一个粗略的代码,可能会有一些错误,但你的想法..

你的AJAX调用会发布的数据取决于类型type:"POST"type:"GET"在阿贾克斯..你可以在控制器获得。 如果控制器看到,有一些帖子,然后控制器将做相应的动作。 或者如果你正在寻找让控制器没有张贴发送的HTML代码。



文章来源: make controller return HTML or JSON depending on request type