Folks, Ho un'applicazione web in cui ho riutilizzato lo stesso percorso per le rappresentazioni JSON e HTML della stessa risorsa, chiamiamolo/foo/dettagli per ora. Questa pagina è collegata da, chiamiamola/bar/dettagli. (quindi, guardando/bar/dettagli vedi link a ->/foo/dettagli).Pulsante Indietro (Chrome) Ottiene Json invece di HTML in Play Framework
Quando passo dalla prima alla seconda, tutto funziona correttamente. Quando faccio clic sul pulsante Indietro in Chrome, la pagina originale viene visualizzata come JSON anziché HTML. Se clicco nel refresh del browser, ottengo la rappresentazione HTML e non il JSON.
Ecco il codice che sto usando per rilevare JSON vs HTML:
res.result.map { group =>
render {
case Accepts.Html() => Ok(views.html.groups.details(group))
case Accepts.Json() => Ok(Json.toJson(group))
}
}.getOrElse(NotFound)
Questa è l'implementazione standard di questo modello e funziona ovunque, tranne quando uso il pulsante indietro in Chrome in alcuni situazioni.
C'è qualche valore che non sto cancellando, o qualcosa che le mie pagine stanno facendo con Ajax che confonde Play per renderlo renderizzato in Json, o forse Chrome sta memorizzando nella cache la pagina ma memorizzando nella cache l'intestazione sbagliata accetta ??
Posso aggirare questo usando due percorsi diversi, uno per Json e uno per Html, ma non mi piace perché mi sembra di arrendermi.
Qualcuno ha qualche idea su cosa provoca questo comportamento solo nel pulsante Indietro?
Potrebbe essere una cache del browser. Hai provato su diversi browser? –
È sicuramente la cache del browser di Chrome. –