เนื่องจาก IE นั้นมีความสามารถที่จะไปเรียก cache ที่เคยมีการร้องขอ(request) ไว้แล้วได้เลย โดยไม่ต้องติดต่อกับ server
จนหลายคนมักบ่นกันว่า ทำไมข้อมูลที่แสดงขึ้นมา มันยังไม่ update สักทีทั้ง ๆ ที่เพิ่งเพิ่มข้อมูลเข้าไปแล้วเห็น ๆ ในdatabase ก็มีแล้วนิ
จนต้องปิด browser แล้วเปิดขึ้นมาใหม่
วิธีแก้นั้นมี 2 วิธีก็คงแล้วแต่สถานะการณ์นะครับ ว่าอยากจะให้ได้ข้อมูลแบบไหน
วิธีที่ 1 คือการ set header ใ้้ห้หน้าที่ AJAX จะเรียกมาใช้ซึ่งแต่ละ ภาษานั้นก็คล้าย ๆ กัน ผมขอยกตัวอย่างสำหรับ asp และ php แล้วกันนะครับ
สำหรับ ASP
<%
Response.AddHeader "Last-Modified", Now & " GMT"
Response.AddHeader "Pragma", "no-cache"
Response.AddHeader "Cache-Control", "no-cache, must-revalidate"
Response.Expires = -1
Response.CacheControl = "no-cache"
%>
สำหรับ PHP
<?
header ("Expires: Mon, 26 Jul 1997
05:00:00 GMT");
header ("Last-Modified: " . gmdate("D, d M
Y H:i:s") . " GMT");
header ("Cache-Control: no-cache,
must-revalidate");
header ("Pragma: no-cache");
?>
วิธีที่2 จะเป็นการหลอกมันด้วยการส่ง parameter ที่จะได้ค่าสุ่ม
(random) หรือ ค่าวันและเวลาก็ได้ แต่ละครั้งที่มีการ request
พ่วงท้ายไปด้วย
เช่น
httpRep.open('get','./search.php?txt='+txt+'&temp='+Math.random(),'true');
ขอบคุณมากครับ หาอยู่นานกว่าจะเจอเวบนี้
ใช้แล้วไม่ work อ่าค่า คือตอนนี้ทำเกี่ยวกับเรื่อง upload รูป
แต่พอ delete แล้วมันยังจำรูปเดิม
(delete โดยการ ลบรูปที่ต้องการแล้ว rename อีกรูป ให้กลายเป็นชื่อของรูปที่โดนลบไป)
แต่ถ้าไป set (temporary file)evey time i visit new page ของ ie ถึงจะ work
--เป็นไปได้มั้ย ว่ามัน ดู ค่าที่ set บน brower ใหญ่สุด โดยมองข้าม header เราไป
หาวิธีมา เดือนกว่า แล้ว ค่า ช่วยด้วย+++
ลองแบบนี้ดูครับ
แต่อาจมีปัญหาถ้า server มีการเีรียก ผ่าน proxy server วิธีนี้จะไม่ค่อยได้ผลนะครับ
image.php
<?php
header ("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header ("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header ("Cache-Control: no-cache, must-revalidate");
header ("Pragma: no-cache");
header('Content-Type: image/jpeg');
readfile("images/testimg.png");
?>
display.html
<body>
<img src="image.php" />
</body>