2012-09-12 17 views
0

我有一個表格有remote => true。當我第一次提交時,一切正常。Rails 3遠程重新提交動態字段

如果有任何錯誤,我想向此表單添加新字段。我用update.js.erb做了這個。

問題是,當我重新提交此表單時,結果js文件呈現爲html(即我看到屏幕上的js文件文本)。這是第一次渲染爲js的update.js.erb文件...

任何想法我失蹤了嗎?

UPDATE: 第一次嘗試,格式爲:

format 
=> #<ActionController::MimeResponds::Collector:0xc61711c 
@order=[text/javascript], 
@responses={text/javascript=>nil}> 

在第二次提交的:

format 
=> #<ActionController::MimeResponds::Collector:0xceaadec 
@order=[], 
@responses={}> 

我update.js只是基本

$("#checkout_modal").html("<%= escape_javascript(render 'plan_pay_modal')%>"); 

和plan_pay_modal與原始頁面上的部分相同(如果存在,將顯示新字段的表單)是錯誤的。我也試過只是領域相同的問題)。

回答

0

如果您在瀏覽器中看到javascript爲內容,則意味着瀏覽器發送的請求是正常的html請求,而不是ajax請求。這反過來意味着表單出於某種原因未被設置爲:第二次提交時,remote => true。我建議你調查爲什麼會出現這種情況,或者粘貼一些代碼,以便我可以進一步幫助你。

您可以驗證我說的是在您的控制器應訴這樣正確的:

respond_to do |format| 
    format.html { raise "Request is not ajax based!" } 
    format.js { render 'update' } 
end 

編輯:

第二後看起來不正確,所以更新。 js.erb可能會修改表單,使其無法正常工作。爲什麼不呈現之前在模式中的內容。換句話說,最初在頁面上顯示模態中的部分內容,那麼update.js.erb只是表示部分內容並替換模態內容。如果存在錯誤,則可以在部分中激活新添加的動態字段。

+0

對於你的編輯:這是怎麼回事。 js只呈現原始頁面上使用的相同部分 – montrealmike

+0

您是對的,瀏覽器在第二次請求時確實請求了html而不是ajax。我檢查了頁面上的html,並將data-remote設置爲true。看起來像這是一個綁定問題... – montrealmike

+0

必須調查你的HTML瀏覽器檢查元素,並將其與正常:遠程=>真正的形式應該是什麼比較。但我個人會堅持重新渲染這種模式中的相同部分。 –

相關問題