2010-03-25 1 views
0

안녕하세요, 이상한 문제가 있습니다. 시간 간격으로 데이터를 새로 고치는 업데이트 시스템이 있습니다. 그것은 인터넷 익스플로러 8을 제외한 모든 브라우저에서 잘 작동합니다. 문제는 데이터가로드되면 데이터가 더 이상 업데이트되는지 여부는 중요하지 않으며 인터넷 기록이 지워질 때까지 시각적으로 데이터를 업데이트하지 않는다는 것입니다. 나는 어떤 쿠키 쿠키도 사용하지 않고있다 ... 누군가는 이런 식으로 마주 친다. 여기 Jquery Internet Explorer 8 호환성 문제가 기록이 삭제되지 않는 한 데이터를로드하지 않습니다.

은 사전

function prepare(response) { 
      var d = new Date(); 
      count++; 
      d.setTime(response.time*1000); 

      var mytime = d.getHours()+':'+d.getMinutes()+':'+d.getSeconds(); 
      var string = '<li class="shoutbox-list" id="list-'+count+'">' 
       + '<span class="shoutbox-list-nick"><a href="statistics.php?user='+response.user+'">'+response.user+'</a></span>' 
       + ' <span class="date">'+mytime+'</span><br>' 
       + '<span class="msg">'+response.message+'</span>' 
       +'</li>'; 

      return string; 
     } 
function refresh() { 
      $.getJSON(files+"shoutbox.php?action=view&time="+lastTime+"&topic_id="+topic_id, function(json) { 
      if(json.length) { 
       for(i=0; i < json.length; i++) { 
       $('#daddy-shoutbox-list').prepend(prepare(json[i])); 
       $('#list-' + count).fadeIn(1500); 
       } 
       var j = i-1; 
       lastTime = json[j].time; 
      } 
      //alert(lastTime); 
      }); 
      timeoutID = setTimeout(refresh, 3000); 
     } 
     $(document).ready(function() { 

      var options = { 
       dataType:  'json', 
       beforeSubmit: validate, 
       success:  function(response, status){ 
        if (response.error=='success'){ 
        success(response, status); 
        } 
        else { 
         $.prompt(response.error); 
        } 
       } 
      }; 
      $('#daddy-shoutbox-form').ajaxForm(options); 
      timeoutID = setTimeout(refresh, 100); 


     }); 
+0

검색어 문자열이 변경 되나요? URL이 변경되지 않으면 IE에서 AJAX GET 요청을 캐시하는 경우가 있습니다. 추신 : 피들러를 사용하여 캐시에 있는지 확인할 수 있습니다. – scunliffe

+0

예 나는 아래에있는 사람들처럼 시간 기록을 URL에 첨부했습니다. – Scarface

+0

IE는 항상 동일한 URL에 요청을 캐시합니다. – dmp

답변

2

이 캐싱 문제 같은 소리에 어떤 도움을 주셔서 감사합니다 내 자바 스크립트입니다. 임의의 문자열을 URL에 추가하여 URL이 변경되도록하십시오.

var url = 'example.php?foo=bar&r=' + Math.random(); 
+2

난 단순히 임의의 숫자 대신 타임 스탬프를 붙일 것이다. "... & t ="+ (새 날짜()). getTime(). toString(); ' –

+0

Heh. 이런 종류의 일을 매우 자주 처리하지 않아도되는 것은 분명합니다. – Matchu

+0

글쎄, 어쨌든, 당신이 올바른 생각을했기 때문에 +1. 또 다른 문제는 IE6, IE7 및 IE8에서 캐싱이 발생했기 때문에 이것이 내 기본 솔루션입니다. jQuery가 구성 가능한 옵션으로 프레임 워크에이 기능을 구현하지 않은 이유가 확실하지 않습니다. –

4

서버의 캐시 제어를 확인해야합니다. 여기에 원인이있는 것 같습니다. 아마 당신의 결과에 "no-cache"http 헤더를 추가 할 수 있습니다.

+0

어쨌든 나는 특정 문제에 해킹이되지 않는 해결책이 있다는 것을 항상 잊어 버립니다. +1, 답변을 참조 용으로 남겨 둡니다. 어쨌든 남자, 덕분에 – Matchu

+0

고맙지 만 캐싱을 거부하려했으나 제대로 작동하지 않았습니다. 어쩌면 내가 잘못 했어, 나는 PHP 헤더를 사용했다. 헤더 ("Cache-Control : no-cache, must-revalidate"); – Scarface

+0

서버에서 보낸 헤더를 확인 했습니까? Firebug 나 IE developper 도구로 쉽게 할 수 있습니다. –

관련 문제