成功的ajax表单后重定向到

Gal*_*axy 10 ajax ruby-on-rails ruby-on-rails-3

我有一个远程=> 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
Run Code Online (Sandbox Code Playgroud)

哪个有效,但感觉非常笨拙.它也不允许我使用闪光通知,这确实是悲伤的时间.

理想情况下,我觉得我应该能够简单地使用"format.js {redirect_to ...}或检查请求标头和redirect_to .Sheesh!

我不确定最好的解决方案是什么.任何建议都会超级棒,提前谢谢!

- PS - 我知道之前有人问过这个问题但无济于事:如何在成功提交AJAX表单后重定向.似乎有很多类似的问题浮出水面,但没有真正的解决方案.

Yan*_*hao 5

我想这可能是不可能的.对XML Ajax请求的响应由XMLHttpRequest处理.如果返回3xx响应,则XMLHttpRequest将遵循重定向本身,如果URL具有相同的来源.无论您如何设置标头,浏览器都无法意识到这一点.因此,唯一的方法是使用一些Javascript更改window.location.

  • 设置标头不是Rails方式; 因此,我不建议走那条路. (2认同)