Rails用AJAX请求响应不同的格式

Rails responding to different formats with AJAX request

本文关键字:格式 响应 AJAX 请求 Rails      更新时间:2023-09-26

我正在尝试理解Rails中的AJAX请求。我有一个表单,我目前使用remote: true提交。如果请求成功,我想用HTML重定向响应,如果请求不成功,则用Javascript运行错误消息。然而,无论结果如何,请求似乎都期望返回一个.html。

respond_to do |format|
  if conversation
    format.html { redirect_to(conversation_path(conversation)) }
  else
    format.js
  end
end

这是在我将对话调用保存到AJAX之后调用的。如果保存成功,路径HTML将被正确地发送回来,但不会在客户机上呈现。但是如果保存不成功,它会期望.html并抛出错误。我如何接受。js作为响应?我的目标是在调用不成功时弹出一个错误,在成功调用时redirect_to。

编辑:My form_for:
<%= form_for :conversation, url: :conversations, remote: true, html: { class: "conversation-form" } do |f| %>

这是您最终目标的建议替代方案-在控制器中,将format.html条目放入respond_to块中。另外,将conversation设置为视图模板可以访问的实例变量:

class YourController < ActionController::Base
  def your_action
    # awesome code doing stuff with a conversation object goes here
    @conversation = conversation
    respond_to do |format|
      format.js # your_action.js.erb
    end
  end
end
然后,将重定向逻辑放在javascript视图模板中(对于上面的示例:app/views/.../your_action.js.erb):
<% if @conversation.errors.any? # or whatever condition you want to show a popup for %>
  // put your javascript popup code here
  alert('Errors happened!');
<% else %>
  // this is how you do a redirect using javascript:
  window.location.href = "<%= conversation_path( @conversation ) %>";
<% end %>

希望这对你有帮助!