Usando respondendo_ para uma degradação graciosa com Ajax no ror 2.x
-
02-07-2019 - |
Pergunta
Eu estava passando pelo livro AWDR sobre desenvolvimento da Web com Ruby on Rails e um dos problemas com o código antigo foi que não usava o respondente para garantir que a exibição usada fosse a visualização JavaScript. Agora, em alguns exemplos atualizados, vi pessoas mencionando que mais tarde, ao implementar degradação graciosa, use request.xhr? Para saber se o usuário possui o JavaScript ativado e, se não, redirecionará o usuário.
Eu queria saber se você poderia usar o respondente para obter o mesmo comportamento e, se sim, se isso é considerado uma boa forma ou não e por quê?
Então, o que estou pensando em fazer é algo como:
def function
respond_to do |format|
format.js do
basic_stuff
end
format.html do
basic_stuff
user_redirect
end
end
end
Parece meio que viola o princípio seco, e provavelmente estou perdendo algo sobre como o usuário e o servidor estão interagindo aqui. Para ser sincero, a documentação da API não deixou totalmente claro para mim.
Solução
Bem, você pode refatorar assim:
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?
olha para o pedido X-Requested-With
Cabeçalho (para ver se ele contém "xmlHttPrequest"). respond_to
olha para os tipos de MIME aceitos.
Você pode usar qualquer um para implementar algum tipo de degredação graciosa.
MAS Você não será capaz de usar xhr?
Para degredação graciosa, a menos que suas chamadas AJAX estejam definindo esse cabeçalho (o protótipo faz isso automaticamente).
Além disso, respond_to
Dá mais flexibilidade, ou seja, enviando XML, JSON, JS, seja qual for o mesmo a partir do mesmo bloco.
Então eu recomendo respond_to
aqui.