【发布时间】:2013-05-10 14:51:53
【问题描述】:
我正在尝试 grails 中的 withFormat 闭包。我的行动有以下几点:
if (myInstance.save(flush: true)) {
withFormat {
html {redirect(action: "list") }
js {render "alert('came here')"}
}
}
据我了解 withFormat 闭包:如果ACCEPT 标头是text/javascript,那么它只会呈现警报,如果它是['text/html','application/xhtml+xml'],那么它将重定向到list 操作。但是,在我的情况下,它总是呈现 list 动作。
我在 Chrome 中使用 REST 控制台,这里是我的请求标头的详细信息:
Accept: text/javascript
Content-Type: application/json
Connection: keep-alive
Origin: chrome-extension: //rest-console-id
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.65 Safari/537.31
这里是响应头:
Status Code: 200
Date: Fri, 10 May 2013 14:45:18 GMT
Server: Apache-Coyote/1.1
Transfer-Encoding: chunked
Content-Language: en-US
Content-Type: text/html;charset=UTF-8
响应正文总是以 HTML 形式返回,而我期待的是 JS
config.groovy 中的 mime 类型似乎也是正确的
grails.mime.types = [
all: '*/*',
atom: 'application/atom+xml',
css: 'text/css',
csv: 'text/csv',
form: 'application/x-www-form-urlencoded',
html: ['text/html','application/xhtml+xml'],
js: 'text/javascript',
json: ['application/json', 'text/json'],
multipartForm: 'multipart/form-data',
rss: 'application/rss+xml',
text: 'text/plain',
xml: ['text/xml', 'application/xml']
]
我在这里做错了什么??
经过一些测试,我发现先关闭的优先。如果我有:
withFormat {
js {render "alert('came here')"}
html {redirect(action: "list") }
}
那么即使我从浏览器测试应用程序,JS 也总是被渲染...
【问题讨论】:
标签: javascript grails mime-types