2008-09-29 55 views
3

我正在通过rails上的ruby进行关于web开发的AWDR书籍,其中一个与旧代码相关的问题是它没有使用respond_to来确保视图使用将是JavaScript视图。现在在一些更新的例子中,我看到人们稍后提到他们,在实现优雅的降级时,使用request.xhr?告诉用户是否启用了JavaScript,如果不启用,则重定向用户。在RoR 2.x中使用respond_to与ajax进行优雅降级

我想知道你是否可以使用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文档并没有让我完全清楚。

回答

2

那么你可以重构这样的:

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

相关问题