【问题标题】:How to implement redirect response with an AJAX request in Rails 3?如何在 Rails 3 中使用 AJAX 请求实现重定向响应?
【发布时间】:2012-01-10 03:58:13
【问题描述】:

我有一个简单的场景,我想请求一个页面。请求格式为 AJAX。如果该请求的控制器/操作逻辑中有一些错误,我想重定向到错误页面。问题是重定向不是 JavaScript 响应类型,所以我不确定它是否会起作用。

如果没有错误,那么我希望通过适当的 JavaScript 响应类型更新页面。

鉴于请求格式是 AJAX,实现重定向响应的最佳做法是什么?

【问题讨论】:

  • 您能具体说明您使用的 ajax 库吗? jquery 或原型-js 等
  • 我怀疑,根据 Stack Overflow 当前的主题规则,这是相当广泛的,它可能会被搁置。

标签: ruby-on-rails ajax redirect


【解决方案1】:

This blog post 启发了我,如果您的 ajax 响应是 ajax,我认为这是正确的方法;至少,在不显眼的 javascript 范式中。本质上,ajax 调用总是返回一个标准的 json 包,它可以被解析为信息负载或重定向 url。

【讨论】:

    【解决方案2】:

    您也可以将其放入您的 ApplicationController 以正确重定向 AJAX 请求:

    class ApplicationController < ActionController::Base
    
      # Allows redirecting for AJAX calls as well as normal calls
      def redirect_to(options = {}, response_status = {})
        if request.xhr?
          render(:update) {|page| page.redirect_to(options)}
        else
          super(options, response_status)
        end
      end
    
    end
    

    【讨论】:

    • @iWasRobbed- 我喜欢这个答案,但是 OP 指定了 Rails 3,所以 render(:update) 除非我弄错了否则不会工作
    • @Yarin 适用于 Rails 3。当您进入 Rails 3.1+ 时,您需要替换 render(:update)
    【解决方案3】:

    如果你使用 jQuery,你可以使用 .ajaxError()

    $(document).ajaxError(function(event, request, settings){
      location.href = '/error.html';
    });
    

    或者假设你做了一个 ajax 帖子

    var jqxhr = $.post("example.php", function() {
      // Do what it completed will do
    })
    .error(function() { 
      location.href = '/error.html';
    })
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-02
      • 2018-01-21
      • 2011-04-30
      • 1970-01-01
      相关资源
      最近更新 更多