2

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

  1. 人员输入 C++ 代码
  2. 人按提交
  3. C++ 代码被发送到 compile.php
  4. compile.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");
?>
4

1 回答 1

1

要解决此问题,您可以尝试在发出 AJAX 请求时禁用 Javascript 库中的缓存。对于JQuery,设置cachefalse.

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

于 2012-07-07T10:17:00.490 回答