使用AJAX重定向到rails路径

时间:2013-08-30 18:37:32

标签: javascript ruby-on-rails ajax

如何使用ajax刷新带有错误消息的rails路径。我正在等待来自支付API的回调,如果我收到错误,我想重新加载页面并显示错误。问题是我正在使用ajax。我该怎么办呢?

3 个答案:

答案 0 :(得分:1)

如果数据库中仍然存在错误,您可以在回调函数上使用window.location,以便在页面中重新出错。

答案 1 :(得分:1)

在响应AJAX请求的操作中,您可以执行

flash[:alert] = "My error"

然后让动作呈现重定向:

render js: "window.location.href = '#{my_named_route_path}'"

或者,您可能想要编写一个方法来抽象它,例如:

app/controllers/application_controller.rb

def redirect_to_via_xhr_if_applicable(url, options = {})
  flash[:info] = options[:info] if options.key?(:info)
  flash[:alert] = options[:alert] if options.key?(:alert)
  flash[:notice] = options[:notice] if options.key?(:notice)
  if request.xhr?
    render js: "window.location.href = '#{url}'"
  else
    redirect_to(url)
  end
end

然后你可以通过AJAX(或非AJAX)动作进行调用:

redirect_to_via_xhr_if_applicable(my_named_route_path, alert: 'My error!')

答案 2 :(得分:1)

刷新页面以显示简单的反馈错误是完全没必要和冗长的。更简洁,更直接的方法是使用js来更新回调中的dom。

一个非常简单的演示:

$(".errors").append('<li>My error</li>');

以简洁的名义,这样做(或javascript中的类似内容),不要仅重定向以显示错误。