2012-08-15 16 views
5

मैं रेल में एक चार्ट पैदा कर रहा हूँ इस तरह एक d3.js JSON कॉलबैक का उपयोग कर:निशाना साधते ब्राउज़र "वापस" बटन JSON बजाय एचटीएमएल (रेल और d3.js का प्रयोग करके) से पता चलता

देखें

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

नियंत्रक

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

सभी ठीक काम करता है। हालांकि जब कोई उपयोगकर्ता इस चार्ट को छोड़ देता है, और फिर अपने ब्रोवर पर "बैक" बटन का उपयोग करके इसे वापस ले जाता है तो उन्हें HTML के बजाय JSON के साथ प्रस्तुत किया जाता है।

क्या आप सुझाव दे सकते हैं कि मैं इसे कैसे ठीक कर सकता हूं?

उत्तर

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

this question से प्रेरित के रूप में।

4

ठीक है, ऐसा इसलिए है क्योंकि जब आप वापस बटन दबाते हैं तो ब्राउज़र दिए गए यूआरएल के लिए अंतिम कैश सामग्री की सेवा कर रहा है। IIN आपके मामले में अंतिम सामग्री JSON AJAX (D3) द्वारा अनुरोध की गई है।

स्वीकृत उत्तर के अतिरिक्त आप अन्य तरीके से भी कोशिश कर सकते हैं - पृष्ठ URL पर .html संलग्न करें।

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

भी Vary: Accept हेडर के साथ एक तिहाई मानक तरीका नहीं है, लेकिन यह इस Chrome bug की वजह से कुछ परेशानियों का कारण हो सकता है और कुछ समस्याओं The browser cache is Vary broken

में वर्णित: आप इस नियंत्रक करने के लिए या फिल्टर ApplicationController जोड़कर स्वचालित कर सकते हैं