2012-08-15 24 views
5

tôi là tạo ra một biểu đồ trong Rails sử dụng một d3.js JSON gọi lại như thế này:trình duyệt Tự đánh đập nút "back" cho thấy JSON chứ không phải là HTML (sử dụng Rails & d3.js)

Xem

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

Bộ điều khiển

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

Tất cả đều hoạt động tốt. Tuy nhiên khi người dùng rời khỏi biểu đồ này, và sau đó điều hướng trở lại nó bằng cách sử dụng nút "back" trên trình duyệt của họ, chúng được trình bày với JSON chứ không phải là HTML.

Bạn có thể đề xuất cách khắc phục sự cố này không?

Trả lời

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

Được lấy cảm hứng từ this question.

4

Vâng, điều này là do khi bạn nhấn nút quay lại, trình duyệt đang phân phối nội dung được lưu trong bộ nhớ cache cuối cùng cho URL đã cho. Trong trường hợp của bạn, nội dung cuối cùng là JSON được AJAX (D3) yêu cầu.

Ngoài câu trả lời được chấp nhận, bạn cũng có thể thử cách khác - chỉ cần thêm .html vào URL trang. Bạn có thể tự động hoá nó bằng cách thêm bộ lọc này để điều khiển hoặc ApplicationController:

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

Ngoài ra còn có một cách tiêu chuẩn thứ ba với Vary: Accept tiêu đề nhưng nó có thể gây ra một số rắc rối vì điều này Chrome bug và một số vấn đề mô tả trong The browser cache is Vary broken

Các vấn đề liên quan