我有一个带有远程 => true 的表单。
现在我的控制器看起来像:
# POST /items
# POST /items.json
def create
@item = @store.items.build(params[:item])
respond_to do |format|
if @item.save
format.html { redirect_to edit_admin_item_path(@item), :flash => {:success => "#{@item.name} was successfully created."} }
format.js { render :js => "window.location.href = ('#{edit_admin_item_path(@item)}');"}
format.json { render json: @item, status: :created, location: @item }
else
format.html { render action: "new" }
format.js { render :partial => 'fail_create.js.erb', :locals => { :ajax_errors => @item.errors.full_messages } }
format.json { render json: @item.errors, status: :unprocessable_entity }
end
end
end
这很有效,但感觉很笨拙。它也不允许我使用闪光通知,这确实是一个悲伤的时刻。
理想情况下,我觉得我应该能够简单地使用“format.js {redirect_to...}”或检查请求标头和redirect_to。天啊!
我不确定最好的解决方案是什么。任何建议都会非常棒,提前致谢!
-- PS -- 我知道以前有人问过这个问题,但没有结果:AJAX 表单提交成功后如何重定向 https://stackoverflow.com/questions/9506445/how-to-redirect-after-a-successful-ajax-form-submission-rails-3-2。似乎有很多类似的问题存在,但没有真正的解决方案。
我认为这可能是不可能的。对 Ajax 请求的响应由 XMLHttpRequest 处理。如果返回 3xx 响应,并且 URL 具有相同来源,则 XMLHttpRequest 将遵循重定向本身。无论您如何设置标头,浏览器都无法意识到这一点。所以唯一的方法可能是用一些 Javascript 改变 window.location 。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)