2012-06-15 33 views
7

Tôi đã gặp lỗi lạ trong Chrome 19. Tôi đã triển khai một trang web AJAX đầy đủ (mọi liên kết không phải bên ngoài được mở qua yêu cầu AJAX) với hỗ trợ pushState. Tôi truyền các đoạn mã HTML trong AJAX qua định dạng JSON.Lỗi Ajax + pushState trong Chrome

Khi tôi rời khỏi trang web của mình qua liên kết bên ngoài và sau đó quay lại, Chrome hiển thị dữ liệu được lưu trong bộ nhớ cache cho URL đó - vấn đề là, anh lưu trữ nội dung JSON và hiển thị thay vì trang web đầy đủ.

Đây là tái sản xuất bởi các bước sau (UPDATE: Tôi đã gỡ bỏ chức năng AJAX trên trang web của tôi kể từ đó, vì vậy lỗi này không còn xuất hiện):

  1. mở http://beta.mirtes.cz/
  2. Nhấn vào ngày thứ hai link (16. 6. 2012 bên cạnh "Tất cả bắt đầu bằng một e-mail lạ"). Trang này (bạn hiện đang ở http://beta.mirtes.cz/it-all-began-with-a-strange-e-mail) được tải qua AJAX.
  3. Nhấp vào "Tất cả bắt đầu bằng một e-mail lạ". Bạn được chuyển hướng đến một trang web bên ngoài.
  4. Nhấp vào "Quay lại" trong Chrome sau khi trang được tải hoàn toàn.

Tôi cố gắng gửi tất cả câu trả lời AJAX bằng Bộ nhớ cache-Điều khiển: không có bộ nhớ cache, nhưng không có hiệu lực.

Firefox 12 hoạt động OK.

Trả lời

7

Tôi đi kèm với một giải pháp thay thế - Tôi thực hiện yêu cầu AJAX với tham số GET giả bổ sung -? Ajax = 1. Bằng cách này, trình duyệt có thể nhận ra sự khác biệt giữa nội dung HTML thông thường và JSON. Nó không có bất kỳ tác động nào đối với người dùng, thông số này chỉ hiển thị trong Firebug.

+0

Bạn có thể giải thích thêm một chút về những gì bạn đã làm và cách khắc phục sự cố không? – Ryan

+0

Tôi đang thực hiện tất cả các yêu cầu AJAX với tham số GET bổ sung - trong trường hợp này, ajax = 1. Tham số này không hiển thị với người dùng, vì nó chỉ được thực hiện ở chế độ nền. –

+0

Bằng cách này, trình duyệt có thể biết sự khác biệt giữa nội dung HTML đầy đủ và nội dung AJAX JSON vì các URL khác nhau. Và do đó nó không hiển thị nội dung JSON được lưu trong bộ nhớ cache mà nó không nên. Bạn có thể kiểm tra chức năng trên trang chủ của tôi tại http://ondrej.mirtes.cz/. –