在我的ASP.Net应用程序,它使用大量javascript和jQuery,但也使用母版页和.Net Ajax片段,我一直在IE6(偶尔还有IE7)的状态栏上看到消息"剩余2项"或"剩余15项",然后是"加载somegraphicsfile.png|gif项"这条消息永远不会消失,可能会也可能不会阻止某些页面功能的运行(它似乎确实停滞不前,但我并不确定).
我可以通过刷新.aspx时间来导致99%的情况发生,但是它提到的项目数和文件有时会有所不同.通常是2、3、12、13或15.
我在谷歌上搜索了答案,这里有一些建议或解释.其中一些对我们不起作用,另一些对我们来说实施或try 并不实际.
以下是一些 idea /理论:
IE没有正确缓存图像,因此如果图像在页面上重复,它会反复请求相同的图像,而服务器认为应该在本地缓存图像,因为它已经在该页面上下文中提供了该图像.IE会正确显示图像,但会坐在那里等待永远不会出现的服务器响应.通常,它所说的正在等待的文件会在页面上重复.
该页面使用的是透明的PNG图形.的确是这样,但它们是jQuery用户界面开发人员生成的图形,根据jQuery用户界面开发人员的说法,这些图形是IE安全的.只有jQuery UI组件使用PNG.如果有帮助的话,我们所有的PNG引用都是CSS格式的.我已经将一些图形从PNG更改为GIF,但它很可能会说它正在等待somegraphicsfile.png,就像等待somegraphicsfile.gif一样
图像是在CSS和/或JavaScript中指定的,但位于当前未显示的内容上(例如显示:无项).这可能是真的,但如果是真的,那么我认为预加载图像会起作用,但到目前为止,添加预加载程序没有任何好处.
IIS的缓存策略让浏览器感到困惑.如果这是真的,那么只有微软服务器软件与微软的浏览器有问题(这一点我一点也不惊讶).不幸的是,我无法控制将托管应用程序的IIS配置.
有没有人看到了这一点,并找到了应对的方法?尤其是ASP.有jQuery和jQuery UI的Net应用程序?
UPDATE
另一个数据点是:在至少一个页面上,仅仅注释掉jQuery UI Datepicker组件设置就会导致问题消失,但我不认为(或者至少我不确定)这会修复所有页面.如果它真的"修复"了它们,我将不得不更换插件,因为该功能需要存在.目前,IE6/7上的jQuery用户界面似乎没有任何未解决的问题...
UPDATE 2个
我判断了IIS设置,在我的任何文件夹上都设置了"启用内容过期"为not.取消选中该设置是解决此问题的常见建议.
我还有另一个更简单的页面,我可以在上面始终如一地创建错误.我使用的是jQuery-UI1.6rc6文件(尽管我也try 过jQuery-UI1.7.1,结果相同).只有当我刷新包含jQuery-UI Datepicker的页面时,才会出现问题.如果我注释掉DatePicker设置,问题就会消失.以下是我在执行此操作时注意到的几件事:
- 此页面总是显示"(剩余1项)下载图片http:///images/Calendar_scheduleHS.gif",但仅在重新加载时.
- 当我查看HTTP日志(log)记录时,我发现每次动态打开该映像时,它都会从服务器请求该映像,而不考虑缓存.
- 该图形的所有请求都已完成,并正确返回该图形.没有一个标记为代码200或304(表示服务器正在告诉IE使用缓存版本).为什么它说当所有的请求都完成了,我就等着那张图呢?我不知道.
- 页面上还有一个单独的其他图形(一个UI PNG文件),其代码为304(未修改).在另一个页面上,我用"剩下2个项目"记录了HTTP流量,两个不同的图形文件(都是UI PNG)也有一个304(但都没有被列为"下载"的).
- 这个错误不是无害的——页面没有完全响应.例如,如果我点击其中一个应该执行客户端操作的按钮,页面就会刷新.
- 离开页面并返回不会产生错误.
- 我已经将脚本和脚本引用移到了内容的底部,这不会影响这个问题.脚本仍在$(文档)中运行.准备好了(它太多毛了,除非我必须分开).
FINAL UPDATE AND ANSWER个
下面有很多好的答案和建议,但没有一个是我们的问题.最近的一个(也是 bootstrap 我找到解决方案的那个)是关于长期运行的JavaScript的,所以我奖励了那里的赏金(我想我可以自己回答,但我更愿意奖励导致解决方案的信息).
我们的解决方案是:我们在$(文档)上创建了多个jQueryUI日期 Select 器.ASP中包含的脚本中的就绪事件.Net母版页.在这个客户端页面上,本地脚本的$(文档).ready事件具有在特定条件下销毁日期 Select 器的脚本.我们不得不使用"销毁",因为之前版本的datepicker在"禁用"方面存在问题.当我们升级到最新版本的jQuery UI(1.7.1)并将日期 Select 器的"销毁"替换为"禁用"时,问题就消失了(或者基本上消失了——如果你在加载页面时做得太快,仍然有可能获得"n个剩余项"状态).
我对正在发生的事情的理论是这样的:
- 页面内容加载并有12个或多个
- 母版页脚本创建
- IE将每个请求排队
- 在请求得到处理之前,
- IE还剩下一些