重定向内部AJAX回调

时间:2016-03-25 18:37:35

标签: ruby-on-rails ajax

在我的应用程序中,我调用了一个AJAX请求,在发出请求之后,我想重定向到另一个路径。我遇到的问题是我不知道该怎么做。有人告诉我,我可以“在ajax请求的回调中”渲染json并对其做出响应。“但是我已经尝试了很长一段时间并且不太明白。

AJAX:

    $.ajax({
      url: sub_url,
      type: 'POST',
      data: form_data
    }).success(function(){
      //stuff
    }).fail(function(){
      //stuff
    });

更新行动:

def update    
  current_submission.update_attributes(secret_params)    

  render :json => { :message => "Success!" }
end

我的AJAX请求和呈现json都工作正常,但我迷失了如何重定向。简单地将redirect_to放在update方法中什么都不做。到目前为止我找到的唯一解决方案是:

respond_to do |format|
  format.js { render js: "window.location.href = '#{mypath_path}'" }
end

我被告知是不好的做法,当我找到代码时我就这么认为。

向正确的方向推进会很好,我仍然不完全了解AJAX请求和rails动作的触发时间/时间/顺序。

1 个答案:

答案 0 :(得分:2)

返回有关您希望在JSON响应中重定向到的路径的信息:

def update    
  current_submission.update_attributes(secret_params)    

  render :json => { :new_path => "#new_path" }
end

然后在location.replace()函数中使用success来更新浏览器网址:

$.ajax({
  url: sub_url,
  type: 'POST',
  data: form_data
}).success(function(d){
  // update location on success
  location.replace(d.new_path);
}).fail(function(){
  //stuff
});