【发布时间】:2014-08-26 02:58:21
【问题描述】:
我想知道 Grails 中是否有返回 HTML 或 JSON 的方法,具体取决于我是对某个操作进行 GET 还是仅通过 Ajax 调用一个操作。
例如,如果我对“控制器/动作”进行 Ajax 调用,有没有办法返回 JSON,如果我通过链接转到同一个“控制器/动作”,让它呈现 HTML 页面?还是我必须定义两个不同的动作?
【问题讨论】:
标签: ajax grails controller action
我想知道 Grails 中是否有返回 HTML 或 JSON 的方法,具体取决于我是对某个操作进行 GET 还是仅通过 Ajax 调用一个操作。
例如,如果我对“控制器/动作”进行 Ajax 调用,有没有办法返回 JSON,如果我通过链接转到同一个“控制器/动作”,让它呈现 HTML 页面?还是我必须定义两个不同的动作?
【问题讨论】:
标签: ajax grails controller action
通常所有 AJAX 请求都设置了 X-Requested-With 标头。您可以检查是否设置了此标头并呈现所需的响应格式:
if (request.getHeader('X-Requested-With')) {
// render response as JSON
} else {
// render HTML page
}
或者(正如 Martin Hauner 在 cmets 中指出的那样)使用基本相同的 request.xhr 属性,如果当前请求是 AJAX,则返回 true:
if (request.xhr) {
// render response as JSON
} else {
// render HTML page
}
request 是一个代表当前请求的对象。 Read more about it in Grails documentation.
【讨论】:
xhr 属性,因为直到现在我一直在检查标题:)
withFormat builder 随时为您提供帮助:
class BookController {
def list() {
def books = Book.list()
withFormat {
html bookList:books
js { render books as JSON }
xml { render books as XML }
}
}
}
【讨论】:
是的,有可能,
如果你在控制器中定义
if(isset($_post) || isset(#_get)){
//if something is posted then this should execute
}
else
{
//this portion should execute..
}
这是一个粗略的代码,可能有一些错误,但你明白了..
您的 Ajax 调用将根据类型发布数据
type:"POST" 或 type:"GET" 在你的 Ajax..
你可以进入控制器。如果控制器看到有东西张贴然后控制器将采取相应的行动。
或者如果没有发布您要查找的内容,让控制器发送 HTML 代码。
【讨论】: