【问题标题】:Rails Ajax create.js.erb how to reload partial?Rails Ajax create.js.erb 如何重新加载部分?
【发布时间】:2012-05-29 00:38:16
【问题描述】:

我有一个通过 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

create.js.erb

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

有什么想法吗?

【问题讨论】:

    标签: jquery ajax ruby-on-rails-3


    【解决方案1】:

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

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

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

    【讨论】:

    • 我在开发者控制台中没有收到任何错误。关于如何询问控制台以确定我得到什么响应的任何建议?
    • 如果使用萤火虫控制台它应该返回响应。您单击请求,该请求也会返回响应
    • 看起来我在 Post 请求中收到 302 Found 响应,然后是 GET 请求的 200 OK。看起来对吗?
    • 不,这是不对的。 302 Found 是一个重定向。您应该只会看到 200 OK。检查 form_for 标记呈现的 URL,并验证它是否是您的 create 方法的正确 URL。尝试使用浏览器直接访问 URL,以确保您的 routes.rb 文件配置正确。当您在 302 Found 响应发生时查看 rails 服务器控制台时,哪个控制器在响应?
    【解决方案2】:

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

    Railscast 136

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多