Utilizzo di respond_to per un degrado gradevole con ajax in RoR 2.x
-
02-07-2019 - |
Domanda
Stavo sfogliando il libro AWDR sullo sviluppo web con ruby ??su rotaie e uno dei problemi con il vecchio codice era che non usava respond_to per assicurarsi che la vista usata fosse la vista javascript. Ora in alcuni esempi aggiornati ho visto le persone menzionare che in seguito, quando implementano un degrado aggraziato, usi request.xhr? per dire se l'utente ha javascript abilitato e, in caso contrario, reindirizzare l'utente.
Mi chiedevo se avresti potuto usare respond_to per ottenere lo stesso comportamento e, in tal caso, se questo è considerato in buona forma o no e perché?
Quindi quello che sto pensando di fare è qualcosa di simile:
def function
respond_to do |format|
format.js do
basic_stuff
end
format.html do
basic_stuff
user_redirect
end
end
end
Sembra in qualche modo violare il principio DRY, e probabilmente mi manca qualcosa su come l'utente e il server interagiscono qui. Ad essere onesti, la documentazione dell'API non mi ha chiarito del tutto.
Soluzione
Bene, puoi refactoring in questo modo:
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?
esamina l'intestazione X-Requested-With
della richiesta (per vedere se contiene " XMLHttpRequest "). respond_to
esamina i tipi di mime accettati.
Puoi usare entrambi per implementare una sorta di degredazione aggraziata.
MA Non sarai in grado di usare xhr?
per un degredation aggraziato a meno che le tue chiamate ajax non impostino quell'intestazione (Prototype lo fa automaticamente).
Inoltre, respond_to
offre maggiore flessibilità, ad esempio inviando xml, json, js, qualunque cosa possa provenire dallo stesso blocco.
Quindi consiglierei respond_to
qui.