我正在尝试执行以下步骤以尝试加载图像,如果失败(因为图像不存在),请创建图像然后加载它。我担心的是第二次加载时图像会被缓存为失败的图像/网址,因此不会第二次加载。
步骤: - 尝试加载图片。 - 如果失败 - jQuery捕获事件 - ajax到php,创建图像,移动到位。 - 然后加载图像。 (以及所有未来的用户都可以使用已移动到位的已保存图像。)
我尝试此方法的原因是200,000个用户,只有被查看的帐户才需要图像(可能是10%) - 因此数据量较少。
有没有更好的方法来做我正在做的事情?
检查图像是否失败的Jquery:
$("img").on("error", function(){...});
感谢
答案 0 :(得分:1)
我建议你创建一个ajax调用来获取图片网址。
在PHP脚本中检查图片网址是否为您提供200
或404
状态。您可以使用file_get_contents();
https://www.sitepoint.com/community/t/display-image-from-url/6334
在200
案例中,显示图像,来自file_get_contents()的图像。
在404
返回显示后备图像。
答案 1 :(得分:1)
我不确定我的回答是否正确,如果我错了,任何人都可以让我知道。我认为您可以修改图片网址以使版本结束,例如'...?v=4'
,如果图片无法加载,只需将该用户的版本增加到'...?v=5'
即可。您可以将sessionStorage
用于此目的,使用唯一键标识图像本身,将值作为计数器,该计数器将显示图像无法加载的次数。每次发生故障时,在会话中第一次发生错误的情况下,递增计数器或将图像添加到计数器为2的sessionStorage
。为此,您可能需要为用户同步版本和服务器端版本。顺便说一下,你也可以在服务器端解决这个问题,然后就不需要版本控制了。