JCrop 缓存图像

Posted

技术标签:

【中文标题】JCrop 缓存图像【英文标题】:JCrop caching image 【发布时间】:2010-10-10 20:01:00 【问题描述】:

我正在尝试使用图像列表来实现 Jcrop。目前,当您单击要裁剪的链接时,灯箱会加载带有图像和所有裁剪工具的 ajax 调用,并且一切正常。我已经测试了数据库中的多个图像,并且看起来都不错。

但是,一旦我裁剪图像并且灯箱关闭,如果我再次尝试裁剪图像,它仍然会显示原始图像,而不是新裁剪的图像。 jCrop 中是否有缓存图像的东西,如果有,我可以将其关闭,以便每次通过 ajax 调用它时都会提取新图像? (刷新页面确实会将图像更新为正确的图像,但这会破坏我在此页面上使用的其他一些功能。)

提前致谢!

【问题讨论】:

【参考方案1】:

我建议在来自服务器的图像数据发生变化时更改 URL - 否则您将多次遇到缓存问题。缓存控制是不够的 - 一些浏览器会忽略该指令。

我不确定您运行的是什么服务器端平台,但here's an easy solution if it is Windows/IIS。

【讨论】:

如果您无法控制服务器端,您可以在获取的网址中添加时间戳:myurl += ?timestamp= new Date().getTime();什么的。【参考方案2】:

图像可能保存在浏览器的缓存中。这可以通过服务器端的 Cache-Control 标头来避免:

Cache-Control: no-cache
Cache-Control: no-store
Cache-Control: max-age=0

这无论如何都会阻止缓存。

【讨论】:

好的,我有第一个,现在已经添加了另外两个,但它仍然无法正常工作。事实上,我现在注意到硬刷新并不总是给我正确的图像。一切都说它正在寻找正确的地方......我只是不明白。 JCrop 可以将图像作为临时文件存储在某处吗? 对不起,你能解释一下吗?我不明白。我相信 jcrop 实际上是在使用 php 来操作图像,但是如果我尝试再次加载图像而不刷新页面(例如 $.post()),它会以某种方式被操作,它会显示原始未裁剪的图像而不是新版本的图像。我的假设是正在进行某种缓存,但是在实现缓存控制标头之后,我仍然没有任何乐趣,所以我不知所措...... 嗯,Jcrop 是一个 javascript 库,在服务器端,你可以拥有 PHP、.net、java 或其他任何东西。我相信您所描述的问题并非特定于 Jcrop。也许如果您可以发布一些代码,我们可以为您提供更好的帮助。【参考方案3】:

我也面临同样的缓存问题。我在 ajax 上传后使用了 colorbox/fancybox 裁剪窗口。但是如果我选择另一个图像,也会有相同的图像。但是当我裁剪图像时,它会裁剪正确的图像,但裁剪窗口中显示的图像是旧的。

我花了很多时间来解决这个问题。 您只需随意更改图片名称,这样就可以解决 EI 缓存问题,您将始终获得新上传的图片。

问候, 极途

【讨论】:

以上是关于JCrop 缓存图像的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 JCrop 获得响应式图像

如果调整图像大小,Jcrop 问题 - Jquery

流体图像上的 Jquery JCrop 功能

jCrop 中的图像失真问题

JCrop 无法正确裁剪图像

使用 JCrop 保存裁剪的图像