簡體   English   中英

Rails 3原型渲染:更新響應具有text / html內容類型

[英]Rails 3 prototype render :update response has text/html content-type

我正在嘗試使用原型和Rails 2.3.11編寫的一些RJS代碼在Rails 3.2.1中工作

我有prototype-rails gem,所以render :update do |page| 工作,我正在使用一個表單:remote => true ,它向控制器發送一個ajax請求,並且javascript看起來好像正在生成。

但是,響應標題中的content-type是text/html; charset=utf-8 text/html; charset=utf-8 ,應該是text/javascript

在控制器中,我這樣稱呼它:

render :update do |page|
    if @step.errors.empty?
        page.redirect_to how_to_path(@article.id)
    else
        page.replace_html 'add_step_form', :partial => 'how_to/add_step', :locals => {:step => @step, :altered => true}
    end
end

它似乎生成window.location.href...Element.update...代碼確定,但它沒有執行,因為內容類型是錯誤的。

我可能做錯了會導致這種情況嗎? 我需要一個能讓原型工作的rjs的解決方案。 jQuery可能會在未來使用,但現在進行更改不是一種選擇。

更新:我已經嘗試了其他一些編寫代碼的方法,包括在render指定:content_type => "text/javascript" ,將其包裝在帶有format.jsrespond_to塊中,並將其重寫為js.erb文件,但是所有仍然返回text/html作為響應頭中的內容類型。

更新我有點弄清楚如何通過在render之前在控制器中添加headers["Content-Type"] = "text/javascript; charset=utf-8"來獲得預期的行為,但這看起來並不是最好的如果我必須在每個RJS實例之前明確添加它,那么這樣做的方法。 如果有人能想出一個,我想要一個更清潔的解決方案。

更新事實證明,在將content-type設置為text / html的每個請求之前,我們運行了一個before_filter 我刪除了這個,並且能夠刪除我添加的所有headers["Content-Type"]代碼。 它在我的開發環境中工作,但在我們的測試驗證環境中沒有。 結果是我們在那里緩存了舊資產,因此驗證運行原型1.6.1,而我的本地開發環境有1.7.0。 這導致rails.js無法在驗證中編譯,因此所有請求都有一個Accepts: text/html而不是text/javascript 刷新緩存加載了較新版本的原型並修復了問題。

事實證明,我們在每個將content-type設置為text / html的請求之前運行了一個before_filter。 我刪除了它,它沒有下面的黑客工作。

但是如果你需要一個解決方法,這就是我在下面做的。

我唯一想要做的就是在render :update之前添加headers["Content-Type"] = "text/javascript; charset=utf-8" render :update

headers["Content-Type"] = "text/javascript; charset=utf-8"
render :update do |page|
  if @step.errors.empty?
    page.redirect_to how_to_path(@article.id)
  else
    page.replace_html 'add_step_form', :partial => 'how_to/add_step', :locals => {:step => @step, :altered => true}
  end
end

不幸的是,我必須在RJS render :update的代碼中的每個地方添加它render :update被調用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM