IE8 останавливает доступ к сети после 5 длинных запросов на опрос

Я использую Long Polling в качестве механизма push в своей системе. Он отлично работает в Firefox и Chrome, но в IE8 поведение довольно странное: он загружается нормально 5 раз (т.е. я могу обновить (F5) страницу 5 раз, html загружается и все скрипты работают правильно) после чего IE8 отказывается выполнять сетевое подключение (я проверял с помощью Fiddler2) и просто бесконечно показывает значок «загрузка». Единственное лекарство на данном этапе — закрыть и открыть сам браузер.
Я использую JQuery и php.

Вот мой код инициализации:

    setTimeout( function()  // called from $(function(){}), jquery page ready event
    {
        start_polling();
    },1000);

function start_polling()
{
$.ajax(
{ 
    url: "/push",
    // must avoid cache because sometimes user is logged in and sometimes not
    data: 
    {
        "anticache":Math.random()
    }, 
    type: "post",
    timeout: 30000, // half a minute before each restart long polling
    success: function(data)
    {
        var dataObj = eval("("+data+")");
        {

            create_notif("withIcon", 
            {
                title: dataObj.title,
                text: dataObj.text,
                icon: "/img/"+dataObj.type+".png"
            }, 
            {
                click: function(e, instance)
                {
                    instance.close();
                }
            });
        }
        start_polling();
    },// end success of ajax load
    error: function(x,t,m)
    {   
        if(t==="timeout") {
            //alert("got timeout");
            start_polling();
        } else {
            //alert(t);
        }
        //start_polling();
    }
}) // end ajax

} // start polling

person Nir O.    schedule 24.08.2011    source источник


Ответы (1)


После долгих поисков я смог найти ответ на другом форуме. Я публикую его здесь для других разработчиков, которые могут столкнуться с такой же ситуацией.


Hi,

У меня такая же проблема. Прерывание запроса AJAX в событии выгрузки тела HTML устранило проблему.

var activeRequest = null;

var atmosphere_result = function(src) {
 activeRequest = null;
 $("#content").html(src);//update div content
}

var atmosphere = function() {
activeRequest = $.ajax({
  type:"GET",
  cache:false,
  url:'/atmosphere',
  success: atmosphere_result
});
};

$(window).unload(function() {
     if (activeRequest)
            activeRequest.abort();
});

@Jeanfrancois: я думаю, было бы неплохо сделать это автоматически в новом плагине jQuery.

HTH, Матиас Райшбахер

person Nir O.    schedule 25.08.2011
comment
обновление: оно было улучшено, но далеко не идеально. Может быть, должен быть какой-то плагин, который собирает все запросы ajax и автоматически применяет к ним прерывание? - person Nir O.; 27.08.2011