【问题标题】:how to force chrome not to reload images with same url till the page is refreshed ,like firefox如何强制 chrome 在页面刷新之前不重新加载具有相同 url 的图像,如 firefox
【发布时间】:2014-03-28 09:57:10
【问题描述】:

Firefox 在刷新之前不会重新加载具有相同 url 的图像。

$("#a").click(function(){$("#img").attr("src","img.php?id=3");});
<img id="img" src="img.php?id=3">

//the two line above are in the same html page.And when the html page is loaded
// in the browser, i open a new tab and go to the php page that includes 
//the line below.

mysql_query("update images set data=$data where id=3");//changing the image here

然后我回到html页面并单击#a,在Firefox中显示旧图像,因此除非刷新html页面,否则它不会询问mysql是否更改了id = 2的图像。但在chrome中显示了新的,更改的图像。它再次询问 mysql,不关心 url 是否仍然相同。

我希望 chrome 的行为类似于 firefox。尝试设置过期、上次修改等标头以不进行缓存,但它以不同的方式工作。据我所知,它没有缓存我正在寻找的内容。无论如何,这是对我来说是一个非常重要的问题,我将不胜感激。

【问题讨论】:

  • 你能发布你的 img.php 和第一页的全图吗,我没有得到你想要做的事情

标签: javascript php jquery


【解决方案1】:

使用这个;

<script>
var randomNumber = Math.random();

$("#a").click(function(){$("#img").attr("src","img.php?id=3&rand=" + randomNumber);});
</script>
<img id="img" src="img.php?id=3&rand="<script>document.write(randomNumber)</script>>

这将始终生成不同的 url。你不需要在后端php处理rand

【讨论】:

  • OP 想要强制缓存图像,而不是避免它
  • a.WOLFF 是对的,我想要缓存或不重新加载你所说的任何内容
  • Hüseyin BABAL 你理解有问题
【解决方案2】:

浏览器行为是个人浏览器所独有的。有些人将他们的浏览器设置为保存历史并因此缓存,而其他人则没有。

您可以通过设置页面上的标题来鼓励或阻止缓存,如下所示:

http://www.php.net/manual/en/httpresponse.setcachecontrol.php

注意,这会被本地浏览器设置覆盖。

另外,通过创建一个不包含查询字符串的 url,例如:

http://www.mydomain.com/myimage3/http://www.mydomain.com/image.php?id=3

你“可能”有更好的运气鼓励在浏览器中进行缓存,尽管我不再像以前那样了。

(zend 和 codeigniter 等框架以更易于部署的格式提供不带查询字符串的 url 结构)

【讨论】:

  • 感谢 saltman,我已经尝试过标题,但它们的工作方式不同(仅适用于第一次加载,加​​载页面后,如果我单击 #a,它仍然会询问 mysql 是否更改了图像)。但是我会尝试不带变量的网址,例如“mydomain.com/myimage3
  • ssaltman 我试过你的建议,但没用 chrome 仍然改变了图片,你有什么其他建议
  • 有 javascript 例程可以“预加载图像”,但这有点超出我的技能范围。但是,我不确定他们是否会缓存图像,但他们会在页面的其余部分之前加载图像,这可能会鼓励缓存,但可能不会。
猜你喜欢
  • 2020-08-12
  • 2011-02-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-14
  • 2011-07-15
  • 1970-01-01
  • 2013-10-17
相关资源
最近更新 更多