IE8 останавливает доступ к сети после 5 длинных запросов - PullRequest
2 голосов
/ 24 августа 2011

Я использую 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

1 Ответ

1 голос
/ 25 августа 2011

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


Привет,

У меня была такая же проблема. Отмена запроса AJAX на событие unload тела 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();
});

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

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

...