我有一张remote => true
的表单。当我第一次提交它时,一切都运作良好。
如果有任何错误,我想在此表单中添加新字段。我用update.js.erb
做了这个。
问题是,当我重新提交此表单时,结果js文件呈现为html(即我在屏幕上看到js文件文本)。这是第一次呈现为js的update.js.erb
文件...
知道我错过了什么吗?
更新: 在第一次尝试时,格式为:
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 :(得分:1)
原来问题是我通过jquery提交
form$.get(0).submit()
在这种情况下不起作用......为了工作我必须使用
form$.trigger("submit.rails")
rails 3 how do i submit a remote form with jquery and avoid callbacks
答案 1 :(得分:0)
如果您在网络浏览器中看到javascript为内容,则表示您的浏览器发送的请求是普通的html请求,而不是ajax请求。这反过来意味着表单由于某种原因未设置为:remote =&gt;第二次提交时为true。我建议你调查为什么会这样,或者粘贴一些代码,以便我可以进一步帮助你。
您可以通过控制器操作中的响应来验证我所说的内容是否正确:
respond_to do |format|
format.html { raise "Request is not ajax based!" }
format.js { render 'update' }
end
编辑:
第二篇文章看起来并不正确,因此update.js.erb可能会以不能正常工作的方式修改表单。为什么不渲染以前在模态中的相同内容。换句话说,最初在页面上显示模态中的部分,然后update.js.erb只是重新呈现部分并替换模态内容。如果存在错误,您可以在部分中使用if来激活添加的新动态字段。