我有一个简单的场景,我想请求一个页面。请求格式是ajax。如果该请求的控制器/操作逻辑中存在错误,我想重定向到错误页面。问题是重定向不是JavaScript响应类型,所以我不确定它是否可以工作。rails 3 - 如何使用ajax请求实现重定向响应
如果没有错误,那么我希望页面通过适当的javascript响应类型进行更新。
在请求格式为ajax的情况下,实现重定向响应的最佳做法是什么?
快速代码示例将不胜感激。
谢谢。
我有一个简单的场景,我想请求一个页面。请求格式是ajax。如果该请求的控制器/操作逻辑中存在错误,我想重定向到错误页面。问题是重定向不是JavaScript响应类型,所以我不确定它是否可以工作。rails 3 - 如何使用ajax请求实现重定向响应
如果没有错误,那么我希望页面通过适当的javascript响应类型进行更新。
在请求格式为ajax的情况下,实现重定向响应的最佳做法是什么?
快速代码示例将不胜感激。
谢谢。
This blog post如果您的ajax响应是ajax,我认为这是正确的方法来启发我,至少,在不显眼的JavaScript范例中。在本质上,ajax调用总是返回一个标准的json包,可以解析信息有效载荷或重定向url。
好博客。我喜欢它。 – 2014-04-23 07:17:15
你也可以把这个在您的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 2013-08-25 23:05:13
@Yarin对Rails 3工作得很好。当你进入Rails 3.1+你需要替换'render(:update)' – iwasrobbed 2013-08-26 13:50:30
@ iWasRobbed-我会纠正 – Yarin 2013-08-27 15:28:30
如果你使用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';
})
你可以指定你使用的ajax库吗? jQuery的或原型JS等 – Jirapong 2012-01-10 04:20:42
这将帮助你 http://stackoverflow.com/questions/199099/how-to-manage-a-redirect-request-after-a-jquery-ajax-call – dbKooper 2012-01-10 06:44:15