【问题标题】:Is it possible to render a different exception page if the request is an XmlHttpRequest?如果请求是 XmlHttpRequest,是否可以呈现不同的异常页面?
【发布时间】:2009-08-30 09:37:34
【问题描述】:

如果 Rails 应用程序出现异常,则会收到一个错误页面,其中包含调用堆栈、请求参数和代码摘录。

  1. 如果请求是 XHR 请求,是否可以创建不同的输出?
  2. 一般情况下是否可以重新定义异常输出? (我认为这会自动回答第一个问题)

【问题讨论】:

    标签: ruby-on-rails ajax exception-handling


    【解决方案1】:

    您可以尝试在您的动作控制器中覆盖rescue_action

    def rescue_action(exception)
      if request.xhr?
        custom_xhr_error_handling_for(exception)
      else
        super
      end
    end
    

    更传统的方法是使用rescue_from Exception, :custom_xhr_error_handling_for,但如果后来发现它不是 xhr 响应,您就无法让默认代码做脏活。

    【讨论】:

      【解决方案2】:

      在开发模式下您只能看到带有回溯的页面,而在生产模式下您会看到一个标准错误页面(位于 public/500.html 中),它只是说发生了错误。

      这是出于安全原因,当然不限于 Rails:所有 Web 应用程序框架都这样做,因为回溯可能会泄露敏感信息(有时您会在 Web 应用程序上看到错误消息显示数据库连接字符串或密码等;好吧,您不希望这种情况发生)。

      在开发模式下,在 XHR 调用中,您仍然会收到回溯(我使用 firebug 来调试我的应用程序,所以我只是将其复制并粘贴到某处)。

      在生产模式下,您可以在 ajax 调用中处理 XHR 错误,方法是通过设置函数的 :failure 参数(如 remote_function)显式设置要在错误时执行的函数。

      【讨论】:

        猜你喜欢
        • 2021-02-09
        • 2020-07-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-12-05
        • 2021-09-01
        • 1970-01-01
        相关资源
        最近更新 更多