2

我有一个通过 ajax 成功提交数据的表单,但我不知道如何在 ajax 操作之后触发事件。提交新记录后,我想重新加载包含表单的部分。

看法

#container
  #partial
   <%= form_for [@qa, @newpdd], :remote => true do |f| %>
    ....
   <%= f.submit "add %>

PDD 控制器

def create
@pdd = Pdd.create!(params[:pdd])
@pdd.qa_id = params[:qa_id]
@qa = Qa.find(params[:qa_id])

respond_to do |format|
  if @pdd.save
    format.html { redirect_to(@qa, :notice => 'Pdd was successfully created.') }
    format.xml  { render :xml => @pdd, :status => :created, :location => @pdd }
    format.js
#    render :partial => pddsection
  else
    format.html { render :action => "new" }
    format.xml  { render :xml => @pdd.errors, :status => :unprocessable_entity }
  end
end
end

创建.js.erb

$('#partial').replaceWith("<%= escape_javascript(render :partial => 'pdds/partial') %>");

有任何想法吗?

4

2 回答 2

0

我使用<%=j %>标签而不是<%= escape_javascript() %>,尽管它们在功能上可能相似。

你的代码看起来不错。:remote => true应该使您的浏览器执行服务器返回的任何 javascript(在本例中为 create.js.erb)。作为故障排除步骤,打开浏览器的开发人员控制台并查看您从 ajax 表单提交中获得的响应。视图渲染是否正确?ERB 呈现的 javascript 是否正确?

如果看起来不错,请将其复制并粘贴到 javascript 控制台中。如果这不能更新页面,请找出它有什么问题。可能是错误的选择器或语法错误。

于 2012-05-29T01:57:05.020 回答
0

我最终放弃了表单中的 :remote => true 条件,如以下 rails cast 所示:

Railscast 136

现在一切都按预期工作。谢谢您的帮助。

于 2012-06-05T10:51:34.783 回答