我正在阅读关于使用 ruby on rails 进行 Web 开发的 AWDR 一书,旧代码的一个问题是它没有使用 respond_to 来确保所使用的 View 是 javascript View 。现在在一些更新的示例中,我看到人们后来提到他们,在实现优雅降级时,使用 request.xhr?判断用户是否启用了 javascript,如果没有,则重定向用户。
我想知道您是否可以使用 respond_to 获得相同的行为,如果可以,这是否被认为是好的形式,为什么?
所以我想做的是:
def function
respond_to do |format|
format.js do
basic_stuff
end
format.html do
basic_stuff
user_redirect
end
end
end
它似乎确实有点违反了 DRY 原则,而且我可能遗漏了一些关于用户和服务器在这里如何交互的信息。老实说,API 文档并没有让我完全清楚。
最佳答案
你可以这样重构:
def function
basic_stuff # executed regardless of the mime types accepted
respond_to do |format|
format.html do
user_redirect
end
end
# will fall back rendering the default view - which you should ensure will be js
end
request.xhr?
查看请求的 X-Requested-With
header (查看它是否包含“XMLHttpRequest”)。 respond_to
查看接受的 mime 类型。
您可以使用其中任何一种来实现某种优雅的降级。
但是您将无法使用xhr?
进行优雅降级,除非您的ajax 调用正在设置该 header (Prototype 会自动执行此操作)。
此外,respond_to
提供了更大的灵 active ,即发送 xml、json、js,无论它来自同一个 block 。
所以我建议在这里使用 respond_to
。
关于ruby-on-rails - 在 RoR 2.x 中使用 respond_to 通过 ajax 实现优雅降级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/149776/