Jquery Ajax называет сбой Internet Explorer? - PullRequest
4 голосов
/ 06 сентября 2010

Должен признать, это мой первый пост на этом сайте, поэтому я прошу прощения за советы, если я что-то не так делаю (форматирование и т. Д.).

В любом случае, я создаю своего рода mmo, используя javascript (и jQuery), и до сих пор все работает нормально в Chrome, Safari, Firefox и т. Д. Однако я обнаружил, что где-то вдоль, Internet Explorer падает.

Воспроизводя сбой, я сократил его до следующего кода:

function getUpdates(){
var data={uid:playerName,area:1,mid:lastMessage};
$.ajax({ 
    url: "getUpdates.py", 
    timeout: 32000,
    data: data,
    type:"GET",
    complete: function(obj, textStatus){
            //handleUpdates(obj);
        getUpdates();
        }
    });
}

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

Обратите внимание, что строка "complete: ..." была опробована как:

success: function(...){getUpdates();...},
error: function(...){getUpdates();...}

с такой же проблемой.

1 Ответ

12 голосов
/ 06 сентября 2010

IE мгновенно возвращает вызов AJAX из кэша.

Вы должны добавить случайный параметр в URL, чтобы IE игнорировал свой кеш, например:

url: "getUpdates.py?RandomNumber=" + Math.random(), 

(Вы также можете использовать new Date)


Кроме того, вы, вероятно, должны проверять наличие обновлений немного медленнее, добавляя 5-секундную задержку:

complete: function(obj, textStatus){
        //handleUpdates(obj);
    setTimeout(function() { getUpdates(); }, 5000);   //milliseconds
}
...