Прерывистый сбой jQuery ajax с использованием IE8 - PullRequest
0 голосов
/ 13 марта 2011

Я использую jQuery ajax для загрузки данных на вкладку jQuery. Он отлично работает в Chrome и FireFox. В IE8 данные иногда не загружаются. Если я очищаю кеш или перезагружаю страницу, она, очевидно, работает нормально.

Насколько я могу судить, происходит сбой после выключения IE и последующего его запуска через некоторое время. Он потерпел неудачу в течение нескольких часов, но успешно, если задержка составляет только минуты. По крайней мере, это то, что, как мне кажется, режим сбоя, я не определил строгое волшебное время.

ETA: работает, если я очищаю кеш или обновляю страницу.

Я поместил лишний параметр времени в данные поста и установил cache: false в вызове ajax.

Данные не кэшируются, так как, если я изменю ожидаемые данные, они будут заполнены правильно.

Еще одно обновление:

Недостающий кусок данных. Это приложение для Facebook. Это оказывается решающим. Я понюхал как рабочие, так и не рабочие сессии с Wireshark. Разница в том, что рабочая сессия отправляет файлы cookie Facebook, а не рабочая - нет.

Таким образом, теперь вопрос заключается в том, как заставить 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];

Ответы [ 2 ]

0 голосов
/ 18 марта 2011

Оказывается, проблема в том, что IE официально ожидает P3P-заголовок для загрузки iframe со стороннего сайта. Facebook реализует приложения, используя фреймы от провайдера приложений.

IE не всегда терпит неудачу, если нет заголовка P3P.

0 голосов
/ 13 марта 2011

В вашей функции 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

...