Jquery Ajax调用崩溃的Internet Explorer?

Syl*_*van 4 crash jquery internet-explorer polling long-polling

我必须承认,这是我在这个网站上的第一篇文章,所以如果我做错了(格式化等),我会在建议中道歉.

无论如何,我正在使用javascript(和jQuery)创建一种mmo,到目前为止,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();
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

应该在很长一段时间内轮询更新.但是,在一次回复之后的IE中,这段代码陷入无限循环,这会使浏览器崩溃.只有在没有服务器响应时,每次回复后似乎都不会崩溃.

注意,表示"完成:......"的行已被尝试为:

success: function(...){getUpdates();...},
error: function(...){getUpdates();...}
Run Code Online (Sandbox Code Playgroud)

出现同样的问题.

SLa*_*aks 12

IE正在从缓存中立即返回AJAX调用.

您应该向URL添加随机参数以强制IE忽略其缓存,如下所示:

url: "getUpdates.py?RandomNumber=" + Math.random(), 
Run Code Online (Sandbox Code Playgroud)

(你也可以用new Date)


此外,您应该通过添加5秒延迟来更慢地检查更新:

complete: function(obj, textStatus){
        //handleUpdates(obj);
    setTimeout(function() { getUpdates(); }, 5000);   //milliseconds
}
Run Code Online (Sandbox Code Playgroud)