使用JS/JQuery时img src异常:显示旧图片而非目标用户图片
看起来你遇到的问题是加载新用户表单时,图片预览没有更新为目标用户的logo,反而显示旧图片。下面是几个常见的原因和对应的解决办法:
1. 事件绑定拼写错误(最容易忽略的点)
你提到逻辑写在windows.onload事件中,但这里的对象名拼写错了——正确的应该是**window.onload**(单数形式,没有末尾的s)。如果写成windows,这个事件绑定是无效的,你的代码根本不会执行,自然不会更新图片的src属性。
修正后的事件绑定示例:
window.onload = function() { var Logo = 'Logos/123.png'; // 这里要确保是当前选中用户的真实路径 if (Logo!='') { $("#previewing").prop("src", Logo); } else { $("#previewing").prop("src", 'images/noimage.png'); // 注意路径大小写统一 } };
2. 浏览器缓存导致图片未刷新
浏览器会自动缓存已加载的图片,如果新用户的logo URL和之前某个用户的URL重复(或者同一个URL对应的图片内容更新了,但浏览器没感知到),浏览器会直接读取缓存里的旧图片,而不是请求新的资源。
解决办法是给图片URL添加一个唯一的查询参数,让浏览器认为是新资源:
var Logo = 'Logos/123.png'; if (Logo!='') { // 添加时间戳或用户ID作为唯一标识 $("#previewing").prop("src", Logo + "?t=" + Date.now()); } else { $("#previewing").prop("src", 'images/noimage.png'); }
如果是针对不同用户,也可以用用户ID作为参数,比如Logo + "?uid=" + 当前用户ID,这样既避免缓存,也更有针对性。
3. Logo变量未正确更新为当前用户的路径
如果你的Logo变量只在页面首次加载时获取一次,而切换用户时没有重新获取并赋值新的路径,那代码还是会用旧的路径设置图片。
需要确保每次选择新用户时,都重新从数据库获取该用户的logo路径,更新Logo变量后再执行图片更新逻辑,而不是只依赖window.onload(它只会在页面加载完成时执行一次)。
4. 路径大小写不匹配(服务器区分大小写时会出问题)
你默认图片的HTML路径是"images/noimage.png"(小写images),但代码里的默认路径是'Images/noimage.png'(大写I)。如果你的服务器是Linux系统(区分文件名大小写),这个路径会找不到图片,不过这可能不是你当前旧图片问题的直接原因,但建议统一路径的大小写避免后续问题。
内容的提问来源于stack exchange,提问作者Roly

