我想知道是否有Grails中的方式返回HTML或JSON或取决于如果我做一个GET到一个动作,如果我只是呼吁通过Ajax的动作。
举例来说,如果我做一个Ajax调用“控制器/动作”,有没有办法回到JSON,如果我去同“控制器/动作”槽的链接,使其呈现一个HTML页面? 或者我必须定义两个diferent行动?
我想知道是否有Grails中的方式返回HTML或JSON或取决于如果我做一个GET到一个动作,如果我只是呼吁通过Ajax的动作。
举例来说,如果我做一个Ajax调用“控制器/动作”,有没有办法回到JSON,如果我去同“控制器/动作”槽的链接,使其呈现一个HTML页面? 或者我必须定义两个diferent行动?
通常,所有的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文档。
在withFormat建设者在这里帮助:
class BookController {
def list() {
def books = Book.list()
withFormat {
html bookList:books
js { render books as JSON }
xml { render books as XML }
}
}
}
是它的可能,
如果您在控制器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代码。