1

I have Ajax function

function getOutput() 
{

  var ajax = getRequest();
  document.getElementById('output').innerHTML = "<br/>";
  ajax.onreadystatechange = function()
  {
      if(ajax.readyState == 4)
      {
          document.getElementById('output').innerHTML = ajax.responseText;
      }

  }
  document.getElementById('output').innerHTML = "<br/><img src=img/ajax-loader.gif><br/><br/>";
  ajax.open("GET", "graph_2.php", true);
  ajax.send(null);
}    

HTML

<form >
  <input type="image" src=img/button.jpg class=mygtukas 
  onclick='getOutput(); return false;'>
</form>
<span id=output></span>

which calls PHP code to create a graph. First time it works fine, but when a user changes graph parameters and press a button again (page doesn't reload) it shows the old graph even dough there is new graph created and saved in server.

4

2 回答 2

1

这可能是因为浏览器的缓存。浏览器将图像的副本保存在您计算机上的临时目录中。因为这个镜像的名字和位置和之前的版本一样,所以从磁盘加载镜像,加载速度更快(不需要重新下载)

解决方案非常简单。将图像名称更改为变量。一个广泛使用的技巧是添加一个随机值:

代替 image.jpg,返回 image.jpg? _randomStringHere

随机字符串可以基于一些事情。在 php 中,我喜欢使用它,uniqid()因为它总是独一无二的(除非有人可以更快地刷新 1 毫秒)。另一种方法是(如下面的评论中所建议的),是时间戳。在phptime()中就足够了。

如果你想要一个 javascript 解决方案,你可以做一些类似的事情image.src = image.src +'?'+ Math.random()


我突然想到它可能是 AJAXcall 本身。您可以在 AJAXcall 中使用上述 javascript 建议,使每个调用都独一无二

Math.random() 文档

于 2013-07-31T09:37:39.757 回答
0

这是由于缓存问题,您可以cache:false通过向 uri 添加随机值来像 jquery 处理它一样处理它。

ajax.open("GET", "graph_2.php?_=" + Math.random() , true);
于 2013-07-31T09:39:50.173 回答