2012-08-15 4 views
5

sto generando un grafico in Rails utilizzando un d3.js JSON richiamata in questo modo:del browser Colpire pulsante "indietro" mostra JSON invece di HTML (usando Rails & d3.js)

View

d3.json(document.URL, function(data){ 
    // generate chart 
} 

controller

def index 
    respond_to do |format| 
     format.html do 
      # return the HTML 
     end 
     format.json do 
      # return the JSON 
     end 
    end 
end 

Tutto funziona bene. Tuttavia, quando un utente lascia questo grafico, e poi torna ad esso utilizzando il pulsante "indietro" sul loro brower, viene presentato con il JSON piuttosto che con l'HTML.

Potete suggerire come posso risolvere il problema?

risposta

2
d3.json(window.location.pathname + ".json" + window.location.search.substring(0), function(json){ 
    // generate chart 
} 

Come ispirato da this question.

4

Bene, questo è perché quando si preme il pulsante indietro il browser sta servendo l'ultimo contenuto memorizzato nella cache per l'URL specificato. Nel tuo caso l'ultimo contenuto è JSON richiesto da AJAX (D3).

Oltre alla risposta accettata, è possibile provare anche l'altro modo: è sufficiente aggiungere lo .html all'URL della pagina. È possibile automatizzare aggiungendo questo filtro al controller o ApplicationController:

before_filter do 
    if request.format == :html && !params[:format] 
     redirect_to format: :html 
    end 
    end 

C'è anche un terzo modo standard con Vary: Accept intestazione ma può causare alcuni problemi a causa di questo Chrome bug e problemi descritti in The browser cache is Vary broken

Problemi correlati