4

我試圖讓與原型和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。沖洗緩存加載了較新版本的原型並解決了問題。

回答

1

事實證明,我們有當時正在每個請求設置內容類型爲text/html之前運行的before_filter。我刪除了它,並且它沒有下面的破解。

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

我弄清楚,使這項工作的唯一的事情是以前的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被稱爲代碼添加在每個地方加入headers["Content-Type"] = "text/javascript; charset=utf-8"

+0

我將此標記爲最佳答案。如果有人提供了一個我可以驗證的更清晰的解決方案,我會很樂意標記他們的。 – keithepley 2012-04-02 21:15:46

+0

原來,在我們的測試驗證環境中,僅在我的本地開發環境中無法正常工作,因此取消了最佳答案。仍然需要一種方法來修復它 – keithepley 2012-06-14 16:45:39

+0

現在修復它。原來這不是代碼,而是一箇舊的'prototype.js'資產被緩存在驗證中。刷新允許'rails.js'正確編譯,並且客戶端開始請求'text/javascript'而不是'text/html' – keithepley 2012-06-15 15:56:58