2013-05-10 28 views
1

我正在嘗試在grails中關閉withFormat。我有我的行動如下:WithFormat閉包不發送基於ACCEPT頭的響應

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

grails.mime.use.accept.header = true設置需要Config.groovy。你有這套嗎?

請參閱頁面底部的withFormat頁面。

+0

該死!就是這樣。現在,響應正文在ACCEPT標題爲「text/javascript」時呈現警報。但是,response'content-type'仍然是'text/html'。這是一個值得關注的問題嗎? – birdy 2013-05-10 15:29:38

+0

多數民衆贊成在正常情況下,您可以使用contentType:'text/javascript'屬性在渲染中更改contentType – davydotcom 2013-05-10 17:11:46

+0

對於遲到的回覆很抱歉。拖出午餐。 @davydotcom是正確的。你可以使用'render(status:200,contentType:'text/javascript',text:「你的文字在這裏)'''。另請注意,'text/javascript'已過時,您可以使用'application/javascript'來實現跨瀏覽器兼容性。 – dmahapatro 2013-05-10 17:31:44