我試圖讓與原型和Rails 2.3.11寫了一些RJS代碼Rails的工作3.2.1Rails 3的原型渲染:更新響應已text/html的內容類型
我有prototype-rails
寶石,所以render :update do |page|
的作品,我使用的表格:remote => true
向控制器發送ajax請求,並且javascript看起來好像正在生成。
但是,響應標題中的內容類型爲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.js
它包裹在一個respond_to
塊,並且將其重寫爲js.erb
文件的一些其他方法,但都仍然與迴歸text/html
作爲響應頭中的內容類型。
更新 我有點想出如何在render
之前控制器增加headers["Content-Type"] = "text/javascript; charset=utf-8"
得到預期的行爲,但是這並沒有真正看起來做的最好的方式,如果我要補充一點明確之前每個RJS實例。如果有人能拿出一個,我想要一個更清潔的解決方案。
更新 事實證明,我們有一個before_filter
這是設置內容類型爲text/html每一個請求之前運行。我刪除了這個,並且能夠刪除我添加的所有headers["Content-Type"]
代碼。它在我的開發環境中工作,但不在我們的測試驗證環境中。原來,我們將舊資產緩存在那裏,因此驗證運行的是原型1.6.1,而我的本地開發環境爲1.7.0。這導致rails.js
不能在驗證中編譯,因此所有請求都有Accepts: text/html
而不是text/javascript
。沖洗緩存加載了較新版本的原型並解決了問題。
我將此標記爲最佳答案。如果有人提供了一個我可以驗證的更清晰的解決方案,我會很樂意標記他們的。 – keithepley 2012-04-02 21:15:46
原來,在我們的測試驗證環境中,僅在我的本地開發環境中無法正常工作,因此取消了最佳答案。仍然需要一種方法來修復它 – keithepley 2012-06-14 16:45:39
現在修復它。原來這不是代碼,而是一箇舊的'prototype.js'資產被緩存在驗證中。刷新允許'rails.js'正確編譯,並且客戶端開始請求'text/javascript'而不是'text/html' – keithepley 2012-06-15 15:56:58