You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何无需延迟用jQuery为多个DOM图片加载This Person Does Not Exist独立图片

解决多个img加载同一图片的问题(无需延迟)

嘿,我完全懂你遇到的这个坑!之前用这个网站的图片时也踩过同样的雷——直接循环设置src会导致所有图片一模一样,靠setTimeout加延迟虽然能解决,但等待加载的体验实在太差了。

问题根源

其实核心原因有两个:

  • 浏览器的缓存机制:如果多个请求的URL参数太相似(比如时间戳生成太快,多个请求用了同一个时间戳),浏览器会直接复用缓存的响应。
  • 目标网站的服务端逻辑:短时间内的重复请求可能会被服务端视为同一请求,返回相同的生成图片。

你的setTimeout之所以有效,是因为每个请求间隔了2秒,让服务端有足够时间生成新图片,同时避免了浏览器缓存冲突,但这显然不是最优解。

最优解决方案:用唯一随机参数替代时间戳

我们可以给每个请求的URL添加一个完全唯一的随机参数,确保浏览器和服务端都把每个请求当成独立的,这样就能并行加载所有图片,无需等待延迟:

$(document).ready(function() {
  $('.imgDNE').each(function() {
    // 生成一个随机字符串作为唯一参数,避免重复
    const uniqueId = Math.random().toString(36).slice(2);
    $(this).attr("src", `https://thispersondoesnotexist.com/image?${uniqueId}`);
  });
});

为什么这个方法有效?

  • Math.random().toString(36).slice(2)会生成一个由字母和数字组成的随机字符串,几乎不可能重复,确保每个URL都是独一无二的。
  • 浏览器会认为每个URL都是新资源,不会复用缓存;服务端也会把每个请求当成独立的生成请求,返回不同的图片。

额外小技巧(可选)

如果偶尔还是出现重复图片的情况,可以再加一层保险:先把img的src设为空,再设置新的URL,强制浏览器重新发起请求:

$(document).ready(function() {
  $('.imgDNE').each(function() {
    const $img = $(this);
    const uniqueId = Math.random().toString(36).slice(2);
    $img.attr("src", "")
         .attr("src", `https://thispersondoesnotexist.com/image?${uniqueId}`);
  });
});

这样就能彻底解决所有图片显示同一张的问题,而且所有图片会并行加载,没有延迟~

内容的提问来源于stack exchange,提问作者Trystan Rivers

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 09:24:40