2012-01-10 75 views
3

我有一个简单的场景,我想请求一个页面。请求格式是ajax。如果该请求的控制器/操作逻辑中存在错误,我想重定向到错误页面。问题是重定向不是JavaScript响应类型,所以我不确定它是否可以工作。rails 3 - 如何使用ajax请求实现重定向响应

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

在请求格式为ajax的情况下,实现重定向响应的最佳做法是什么?

快速代码示例将不胜感激。

谢谢。

+0

你可以指定你使用的ajax库吗? jQuery的或原型JS等 – Jirapong 2012-01-10 04:20:42

+0

这将帮助你 http://stackoverflow.com/questions/199099/how-to-manage-a-redirect-request-after-a-jquery-ajax-call – dbKooper 2012-01-10 06:44:15

回答

3

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

+0

好博客。我喜欢它。 – 2014-04-23 07:17:15

3

你也可以把这个在您的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 
+0

@ iWasRobbed-我喜欢这个答案,但是OP指定了Rails 3,所以'render(:update)'不会工作,除非我错误了。 – Yarin 2013-08-25 23:05:13

+0

@Yarin对Rails 3工作得很好。当你进入Rails 3.1+你需要替换'render(:update)' – iwasrobbed 2013-08-26 13:50:30

+0

@ iWasRobbed-我会纠正 – Yarin 2013-08-27 15:28:30

1

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

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

或假设你做一个阿贾克斯后

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