AJAX 不想缓存图像


AJAX Don't want to cache images

我有一个Web表单,它获取C++代码,在服务器上编译它,然后吐出输出。 有问题的C++代码写出到可以在网页上查看的 BMP 文件。 这是通过 AJAX 接口的。 我的主要问题是,每当我重新编译程序以更改图像时,除非我刷新页面,否则有问题的图像不会更改。 因此,我认为这是一个缓存问题。 以下是步骤:

  1. 人员输入C++代码
  2. 按人提交
  3. C++代码被发送以进行编译.php
  4. 编译.php编译程序并显示目录中的所有图像

如果某人更改了程序中图像的颜色并重新提交表单,则提交成功,但除非刷新页面,否则图像不会更改。 当我更改输出文件名时,我验证了这一点,它会创建一个具有正确颜色的新图像,但是如果您使用相同的文件名重新编译程序,除非您刷新页面,否则该特定图像不会更改。

我尝试将无缓存标头放在 PHP 文件的顶部。

<?php
header("Expires: Mon, 26 Jul 1990 05:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
?>

为了解决这个问题,你可以在发出AJAX请求时尝试禁用Javascript库中的缓存。对于 JQuery,将cache设置为 false

另一种解决方案是在发出请求时手动附加缓存无效化参数。例如,不是向compile.php发出 AJAX 请求,而是向compile.php?123456发出请求,其中123456是当前时间戳。这应该强制浏览器不使用缓存的副本。