我正在阅读关于使用ruby on rails进行Web开发的AWDR书籍,旧代码的一个问题是它没有使用respond_to来确保使用的视图是javascript视图。现在在一些更新的例子中我看到人们稍后提到它们,在实现优雅降级时,请使用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 标头(以查看它是否包含“XMLHttpRequest”)。 respond_to 查看接受的mime类型。

您可以使用其中任何一种来实现某种优雅的降级。

但是除非您的ajax调用设置了该标题(Prototype会自动执行此操作),否则您将无法使用 xhr?进行正常降级。

此外, respond_to 提供了更大的灵活性,即发送xml,json,js,无论它来自同一个块。

所以我建议 respond_to

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top