withFormat闭包没有根据ACCEPT标头发送响应

时间:2013-05-10 14:51:54

标签: javascript grails mime-types

我正在尝试使用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

mime类型在config.groovy

中似乎也是正确的
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 ...

1 个答案:

答案 0 :(得分:1)

grails.mime.use.accept.header = true中需要

Config.groovy设置。你有这个套装吗?

请参阅withFormat页面的底部。