4

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

无论如何,我正在使用 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();
        }
    });
}

应该长时间轮询更新。但是,在 IE 中,在一次回复后,此代码会陷入无限循环,这将导致浏览器崩溃。每次回复后似乎都不会崩溃,只有在没有服务器响应的情况下。

请注意,显示“完整:...”的行已被尝试为:

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

发生同样的问题。

4

1 回答 1

12

IE 立即从缓存中返回 AJAX 调用。

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

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

(您也可以使用new Date


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

complete: function(obj, textStatus){
        //handleUpdates(obj);
    setTimeout(function() { getUpdates(); }, 5000);   //milliseconds
}
于 2010-09-06T02:28:26.860 回答