2011-03-12 77 views
0

我正在使用jQuery ajax將數據加載到jQuery選項卡中。它在Chrome和FireFox中運行良好。在IE8中,數據有時不會加載。如果我清除緩存或重新加載頁面,它顯然工作正常。使用IE8的jQuery ajax間歇性故障

據我可以告訴它關閉IE後失敗,然後在一段時間後再次啓動它。它在幾小時內失敗了,但如果延遲只有幾分鐘就成功了。至少這就是我認爲的失敗模式,我沒有嚴格確定一個神奇的時間。

ETA:它可以工作,如果我清除緩存或刷新頁面。

我已經在post數據中放了一個多餘的時間參數,並在ajax調用中設置了cache:false。

數據沒有被緩存,因爲如果我改變了預期的數據,它會正確地填充它。

另一個更新:

缺少一塊數據。這是一個Facebook應用程序。事實證明,這是至關重要的。 我嗅探了Wireshark的工作與非工作會話。事實證明,不同之處在於工作會議提交Facebook cookie,而不工作的則不提供。

所以現在的問題是如何強制ajax調用包含cookie。我發現的關於ajax調用的描述是它包含了cookie。我看到一個錯誤的行爲?

ETA:

的JavaScript:

$.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

服務器的響應頭是什麼? – 2011-03-12 21:23:58

+0

除了Matt的問題,你可以發佈你的任何代碼嗎?這將有助於我們更好地回答這個問題。 – JasCav 2011-03-12 21:26:26

回答

0

原來的問題是,IE鄭重希望P3P頭從第三第三方網站加載的iframe提及。 Facebook使用應用程序提供商提供的iframe來實施應用程序。

如果沒有P3P標頭,IE不會始終失敗。

0

在你thing.create功能,加上不斷變化的查詢參數,當前日期是好的,或使用一個隨機數。

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

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

同你editPicture。

這將阻止IE緩存,由OMU的回答