2011-03-12 2 views
0

jQuery ajax를 사용하여 데이터를 jQuery 탭에로드하고 있습니다. 그것은 크롬과 파이어 폭스에서 잘 작동합니다. IE8에서는 데이터가로드되지 않는 경우가 있습니다. 캐시를 지우거나 페이지를 새로 고침하면 분명히 정상적으로 작동합니다.IE8을 사용하는 jQuery ajax의 간헐적 인 실패

IE의 종료 후 나중에 다시 시작하면 실패 할 수 있습니다. 몇 시간 안에 실패했지만 지연이 수 분이면 성공합니다. 적어도 그것은 실패 모드라고 생각합니다. 나는 마법의 시간을 엄격하게 결정하지 않았습니다.

ETA : 캐시를 지우거나 페이지를 새로 고침하면 작동합니다.

게시 데이터에 불필요한 시간 매개 변수를 넣었으며 ajax 호출에서 cache : false를 설정했습니다.

예상되는 데이터를 변경하면 올바르게 채울 것이므로 데이터가 캐시되지 않습니다.

또 다른 업데이트 :

데이터가 누락되었습니다. Facebook 앱입니다. 그것은 결정적인 것으로 판명되었습니다. 나는 Wireshark와 작동하는 세션과 작동하지 않는 세션을 모두 킁킁 거렸다. 그 차이점은 워킹 세션이 페이스 북 쿠키를 제출하고 작동하지 않는 것이 쿠키 쿠키를 제출한다는 것입니다.

그래서 이제 질문은 ajax 호출에 쿠키를 포함시키는 방법입니다. 아약스 호출에 대한 설명은 쿠키가 포함되어 있습니다. 내가 버그를보고있는 행동입니까?

ETA :

자바 스크립트 :

$.ajaxSetup 
(
{ 
// Disable caching of AJAX responses 
    cache: false 
} 
); 

$(document).ready 
(
function() 
{ 
    $('#shopTabs').tabs(); 
    thing.create(); 
    thing.editPicture(); 

    $('#shopTabs').bind 
    (
     'tabsselect', 
     function(event, ui) 
     { 
      thing.setReload(ui.index); 
      thing.setActive(ui.index); 
     } 
    ); 
} 
); 

// Must be global for Java to call 

function reload() 
{ 
thing.create(); 
thing.editPicture(); 
} 

var thing = 
{ 
reload : 0, 
active : 0, 

noOp : function() 
{ 
}, 

create : function() 
{ 
    date = new Date(); 
    $('#shopTabs1').load('create.php', {time : date.getTime()}, thing.linkform); 
}, 

editPicture : function() 
{ 
    date = new Date(); 
    $('#shopTabs2').load('editPicture.php', {time : date.getTime()}, thing.noOp); 
}, 

linkform : function() 
{ 
    $('#upload').ajaxForm({target : '#shopTabs1'}); 
}, 

setReload : function 
(
    index 
) 
{ 
    this.reload = this.reloadList[index]; 
}, 

setActive : function 
(
    index 
) 
{ 
    this.active = this.activeList[index]; 
}, 

load : function 
(
    php, 
    args, 
    loadFn 
) 
{ 
    var settings = 
    { 
     type : "POST", 
     cache : false, 
     url : php, 
     data : args, 
     context : this, 
     success : function (data) 
     { 
      $(this.active).html(data); 
      loadFn(); 
     } 
    } 

    $.ajax(settings); 
} 
}; 

thing.activeList = ['#ui-tabs-1', '#shopTabs1', '#shopTabs2']; 
thing.reloadList = [thing.noOp, thing.create, thing.editPicture]; 
+0

서버의 응답 헤더는 무엇입니까? –

+0

Matt의 질문과 함께 코드를 게시 할 수 있습니까? 그러면 우리가 더 잘 대답 할 수 있습니다. – JasCav

답변

0

그것은 문제가 IE가 공식적으로 P3P 헤더 제 3 타사 사이트에서 iframe을로드 할 것으로 예상이었다 밝혀에서 언급 한 바와 같이, 캐싱에서 IE를 방지 할 수

. Facebook은 앱 제공 업체의 iframe을 사용하여 앱을 구현합니다.

P3P 헤더가 없으면 IE가 일관되게 실패하지 않습니다.

0

당신의 thing.create 기능에서 변화하는 쿼리 매개 변수를 추가는, 현재 날짜가 좋은, 또는 임의의 숫자를 사용합니다.

$('#shopTabs1').load('create.php?r='+escape(new Date().toString()), {time : date.getTime()}, thing.linkform); 

또는 editPicture와 같은

$('#shopTabs1').load('create.php?r='+new Date().valueOf(), {time : date.getTime()}, thing.linkform); 

. OMU의 대답

관련 문제