AJAX Cache in IE

posted on 16 Aug 2012 16:04 by bossodian directory Knowledge

การแก้ปัญหา cache กับ AJAX (IE)

Credit:

  • http://www.gotoknow.org/blogs/posts/122329?locale=en
  • http://php.deeserver.net/phpbb/viewtopic.php?f=3&t=82
  • http://stackoverflow.com/questions/4303829/how-to-prevent-jquery-ajax-caching-in-internet-explorer

 

การแก้ปัญหา เรียกหน้าเว็บผ่านระบบ AJAX แล้วข้อมูลไม่อัพเดต ใน Internet Explorer

เท่าที่หาข้อมูลมา ดูเหมือนจะเกิดจากระบบการเก็บ Cache ของ Internet Explorer

 

*UPDATE กรณีที่เราใช้ JQuery AJAX เราสามารถใช้อีกวิธีก็คือ

เพิ่มออฟชั่น cache: false, ไปด้วยตามตัวอย่างนี้

 จาก http://stackoverflow.com/questions/4303829/how-to-prevent-jquery-ajax-caching-in-internet-explorer

You can disable caching globally using $.ajaxSetup(), for example:

$.ajaxSetup({ cache: false });

This appends a timestamp to the querystring when making the request. To turn cache off for a particular $.ajax() call, set cache: false on it locally, like this:

$.ajax({
  cache: false,
  //other options...
});

---------

จาก  http://www.gotoknow.org/blogs/posts/122329?locale=en

เนื่องจาก 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');

 

นอกจากนั้นยังมีวิธีอื่นๆ

จาก http://php.deeserver.net/phpbb/viewtopic.php?f=3&t=82

อาจจะเกิดจากมัน cache ค่าไว้ อาจแก้โดย

  • ส่ง expires header ติดมากับไฟล์ loop.php ด้วย --หรือ--
  • เพิ่ม random ต่อท้าย url ใน $.load เช่น $('#show').load('loop.php?'+Math.random()); --หรือ--
  • ตั้ง ค่าใน IE Tools->Internet Options->tab General->Temporary internet files->Settings เลือก Check for newer versions of stored pages: Every visit to the page

เลือกทำดูสักอย่าง

[All Links] HTML

posted on 25 Jul 2012 09:47 by bossodian directory Knowledge
รอบนี้เป็นของ HTML บ้างแล้วครับ
 
 
HTML : all Links
 
margin0auto.wordpress.com/
 
 
www.sutham.in.th

[All Links] รวมเว็บลิ้งน่ารู้ CSS

posted on 21 Jun 2012 11:28 by bossodian directory Knowledge

CSS-Tricks.com

margin0auto

 

RabbitinBlack

 

 
Tags: css