Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/435.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript:如何在不附加查询字符串的情况下重试加载图像?_Javascript_Jquery_Image_Onerror - Fatal编程技术网

JavaScript:如何在不附加查询字符串的情况下重试加载图像?

JavaScript:如何在不附加查询字符串的情况下重试加载图像?,javascript,jquery,image,onerror,Javascript,Jquery,Image,Onerror,一个网页包含很少的图像,5-10个,平均大小 有时,图像加载会随机失败,并且不会显示 假设每加载100个图像1个失败 这可能是因为服务器繁忙或存在临时网络问题,无论出于何种原因 我确信获取图像的请求是有效的,因此如果我尝试加载图像,我有很好的机会获取它 我有代码来检测图像何时无法加载并触发回调 但是,我如何告诉浏览器“重试加载该图像” 我可以从DOM中删除图像并将其放回原处吗 如果我在URL中附加一个随机查询字符串,那么肯定会重新加载图像,但我更希望避免,因为图像不会被正确缓存 我使用的是jQu

一个网页包含很少的图像,5-10个,平均大小

有时,图像加载会随机失败,并且不会显示

假设每加载100个图像1个失败

这可能是因为服务器繁忙或存在临时网络问题,无论出于何种原因

我确信获取图像的请求是有效的,因此如果我尝试加载图像,我有很好的机会获取它

我有代码来检测图像何时无法加载并触发回调

但是,我如何告诉浏览器“重试加载该图像”

我可以从DOM中删除图像并将其放回原处吗

如果我在URL中附加一个随机查询字符串,那么肯定会重新加载图像,但我更希望避免,因为图像不会被正确缓存


我使用的是jQuery,因此jQuery解决方案对我来说是一个纯JavaScript解决方案。

您可以做的就是尝试将图像加载到一个新的
图像
对象中。如果图像加载,它也会更新所有其他位置(类似于如果将同一图像嵌入50次,一旦加载一次,它们都会显示)。因此,在您的回调中(我假设这是一个错误回调),只需尝试:

var img = new Image();
img.src = this.src; // this should refer to the original failed image

这将触发在新图像对象中加载相同的URL。如果它能工作,两个都会被更新,而我们刚刚创建的那一个根本就不会显示在任何地方。

受萨曼尼建议的启发,我想出了以下几行代码。我在jquery的DocumentReady事件中调用此代码。看看它是否有帮助,如果需要改进,也请告诉我

if(document.images){
var imageArray=新数组(document.images.length);
var i=0;
对于(i=0;iif(r)也许尝试类似的方法可能会有所帮助:不需要回调。使用
onerror
处理。以此为例:@YuriyGalanter我想他是指他在向onerror事件附加回调。我相信[this][1]可能是您正在寻找的答案。[1]:我还没有测试过它,但它应该在所有浏览器中都能正常工作。唯一的问题可能是非常旧的浏览器,
this.src
可能无法工作,您需要使用
this.getAttribute('src'))
相反。我会尝试一下并让您知道。谢谢您的提问……它可以通过一种机制来改进,以处理动态加载新图像的情况。我正在考虑使用延迟加载图像的网页或示例(顺便说一下,这是我的情况)