2009-06-04 43 views
9

Làm cách nào để ngăn các trình duyệt lưu vào bộ nhớ đệm kết quả Ajax? Tôi đã và sự kiện kích hoạt kịch bản Ajax hiển thị kết quả chỉ khi dữ liệu trình duyệt đã được xóa.Làm thế nào để ngăn chặn bộ nhớ đệm kết quả Ajax/javascript trong trình duyệt?

Tested trong IE6 và Firefox 3.0.10

+2

trên thực tế, đây là một vấn đề khá tốt tài liệu. Tôi chắc rằng bạn có thể tìm thấy một câu trả lời rất toàn diện nếu bạn google cho nó. – jrharshath

Trả lời

11

Thêm một chuỗi truy vấn ngẫu nhiên đến URL mà bạn đang gửi.

Ví dụ: nếu yêu cầu Ajax được gửi đến "http://www.xyz.com/a" thì thêm một chuỗi ngẫu nhiên ở cuối: "http://www.xyz.com/a?q=39058459ieutm39"

+3

... và bạn có thể tạo chuỗi ngẫu nhiên trong javascript ví dụ như thế này: Math.floor (Math.random() * 1000000) – Manne

+2

Giải pháp này có một nhược điểm nghiêm trọng: nó lấp đầy bộ nhớ cache nếu bạn truy xuất nhiều tệp. Trong trường hợp của tôi, tôi muốn giữ lại bộ nhớ cache để sử dụng ngoại tuyến, vì vậy tôi không muốn điền vào nó với các phiên bản cũ của yêu cầu. –

4

Có hai kỹ thuật cho điều này mà tôi biết.

  • Thêm một số loại chuỗi truy vấn vào URL yêu cầu AJAX để URL luôn là duy nhất. Một timestamp millisecond (có lẽ kết hợp với một giá trị ngẫu nhiên) là tốt cho
  • Set kiểm soát HTTP bộ nhớ cache này giắc cắm trên phản ứng AJAX để trình duyệt không cache nó
13

trình URL ngẫu nhiên, nhưng đó là loại của một hack. HTTP có các giải pháp được xây dựng trong đó sẽ hoạt động. Hãy thử sử dụng giải pháp indicated here. Về cơ bản, đặt tiêu đề:

"Pragma":   "no-cache", 
"Cache-Control":  "no-store, no-cache, must-revalidate, post-check=0, pre-check=0", 
"Expires":   0, 
"Last-Modified":  new Date(0), // January 1, 1970 
"If-Modified-Since": new Date(0) 
+0

Hoàn hảo, cảm ơn bạn. (Mặc dù có vẻ lạ khi các tiêu đề được đặt trên máy khách thay vì trong phản hồi từ máy chủ!) –

+0

Tôi gặp lỗi khi cố gắng triển khai giải pháp của bạn: 'pragma request header field pragma không được phép bởi" access-control- cho phép tiêu đề "'. Bất kỳ ý tưởng làm thế nào để tránh điều này? Look: http://stackoverflow.com/questions/23048184/xmlhttprequest-with-no-cache-request-header-is-not-allowed –

+0

Một cuộc gọi tôi đã thực hiện sẽ thất bại khi chuyển một số ngẫu nhiên thông qua chuỗi truy vấn. Tôi không xây dựng dịch vụ nhưng dường như nó đang cố gắng diễn giải mọi tham số. Đây là giải pháp hoàn hảo, cảm ơn! – hack3rfx

4

sử dụng jQuery bạn có thể đặt cài đặt ajax toàn cục: {cache: false}. Xem nó trong jquery ajax docs

8

Tôi đã sử dụng phương pháp jQuery {cache: false} và nó hoạt động như một sự quyến rũ.

hoàn chỉnh mã ví dụ là như thế này:

$.ajaxSetup({cache: false}); 
+0

này là tuyệt vời! chuỗi truy vấn ngẫu nhiên không hoạt động. – Brent81

+0

Và đối với tôi, chỉ chuỗi ngẫu nhiên hoạt động! – user984003

+0

ajaxSetup chỉ hoạt động đối với các cuộc gọi ajax. Đối với các cuộc gọi JS khác, bạn có thể cần thêm chuỗi truy vấn chuỗi ký tự ngẫu nhiên. –

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