Kể từ khi nâng cấp lên iOS 6, chúng tôi thấy chế độ xem web của Safari có quyền tự do $.ajax
gọi các bộ nhớ đệm . Đây là trong bối cảnh của một ứng dụng PhoneGap vì vậy nó đang sử dụng Safari WebView. Các $.ajax
cuộc gọi của chúng tôi là POST
các phương thức và chúng tôi có bộ đệm được đặt thành false {cache:false}
, nhưng điều này vẫn xảy ra. Chúng tôi đã thử thêm thủ công vào TimeStamp
tiêu đề nhưng không được.
Chúng tôi đã nghiên cứu thêm và thấy rằng Safari chỉ trả về kết quả được lưu trong bộ nhớ cache cho các dịch vụ web có chữ ký hàm là tĩnh và không thay đổi từ cuộc gọi sang cuộc gọi. Ví dụ, hãy tưởng tượng một hàm gọi là:
getNewRecordID(intRecordType)
Hàm này nhận được các tham số đầu vào lặp đi lặp lại, nhưng dữ liệu mà nó trả về sẽ khác nhau mỗi lần.
Phải trong sự vội vàng của Apple để tạo ra iOS 6 zip một cách ấn tượng, họ đã quá hài lòng với cài đặt bộ nhớ cache. Có ai khác thấy hành vi này trên iOS 6 không? Nếu vậy, chính xác những gì gây ra nó?
Cách giải quyết mà chúng tôi tìm thấy là sửa đổi chữ ký hàm thành dạng như sau:
getNewRecordID(intRecordType, strTimestamp)
và sau đó luôn luôn truyền vào một TimeStamp
tham số, và chỉ loại bỏ giá trị đó ở phía máy chủ. Điều này hoạt động xung quanh vấn đề. Tôi hy vọng điều này sẽ giúp một số linh hồn nghèo khổ khác dành 15 giờ cho vấn đề này như tôi đã làm!