我有一个大量使用 Ajax 的网站。有时我需要为用户在页面上加载大图像文件。我的问题是,当这些大图像文件被下载时,如果用户离开显示图像的页面,是否有办法阻止它们?谢谢。
Javascript:取消/停止图像请求
我遇到了完全相同的问题,当用户通过(ajax)搜索结果快速“分页”时,浏览器仍在尝试下载每个页面的个人资料图像,而不仅仅是当前页面。这段代码对我有用,在运行新搜索之前调用了分页事件:
//cancel image downloads
if(window.stop !== undefined)
{
window.stop();
}
else if(document.execCommand !== undefined)
{
document.execCommand("Stop", false);
}
本质上,这就像单击浏览器上的“停止”按钮。
在IE、FireFox、Chrome、Opera 和 Safari 中测试
像这样。
$(img).attr('src','');
假设您使用 ajax 加载图像,您可以简单地在window.onunload事件中中止请求。为您正在使用的 XMLHttpRequest 对象声明一个全局变量。
var xhr;
//if using the XMLHttpRequest object directly
//you may already be doing something like this
function getImage(...){
xhr = new XMLHttpRequest();
xhr.open(....);
}
如果使用 jQuery,您可以将 $.ajax() 或 $.get 调用的返回值分配给 xhr 变量。
xhr = $.ajax(.....);
处理 window.onunload 并中止请求。
window.onunload = function(){
xhr.abort();
}
将 SRC 标签重新分配给不同的图像在 IE7 中不起作用,它继续尝试下载第一个图像。
这是设置:
我创建了一个 JPEG 类型的 HTTP 处理程序。它包含永远不会完成执行的代码。所以 someImage.src=myhandler.ashx 将永远坐在那里加载,直到超时。
在这中间,按下另一个按钮,将图像重新分配给一个小图像文件:someImage.src=small.jpg
即使我们重新分配了 src,对 myhandler.ashx 的请求也没有结束。
此外,如果你真的删除了节点 someImage.parentNode.removeChild(someImage) 仍然试图下载 myhandler.ashx
使用 IE7 进行测试并使用 HTTP Watch Pro 进行监控。
可怜的人的解决方案是简单地将图像标签的 SRC 属性设置为空字符串,或者将其指向小部件。
编辑
看到你的评论,很惊讶它不能将 SRC 属性更改为空...尝试使用 blank.gif 或其他东西。
如果这不起作用,您可能会受到浏览器架构的限制,这意味着您是 SOL