创建了新图像,但旧图像显示为JS(AJAX)

时间:2013-07-31 09:35:39

标签: php javascript ajax image

我有Ajax功能

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>

调用PHP代码来创建图形。第一次它工作正常,但当用户更改图形参数并再次按下一个按钮(页面不重新加载)时,它显示旧图形甚至面团创建并保存在服务器中的新图形。

2 个答案:

答案 0 :(得分:1)

这可能是因为浏览器的缓存。浏览器会在临时目录中保存计算机上的映像副本。由于此映像与先前版本具有相同的名称和位置,因此它会从磁盘加载映像,从而加载分配速度更快(无需再次下载)

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

而不是image.jpg,返回image.jpg?_ randomStringHere

randomstring可以基于一些东西。在php中我喜欢使用uniqid(),因为它始终是唯一的(除非有人可以更快刷新然后1 milisec)。另一种方法(如下面的评论中所建议的)是时间戳。在php time()就足够了。

如果你想要一个javascript解决方案,你可以在image.src = image.src +'?'+ Math.random()

的行中做一些事情

我刚想到它可能是AJAXcall本身。您可以在AJAXcall中使用上面提到的javascript建议来使每个呼叫都是唯一的

Math.random() documentation

答案 1 :(得分:0)

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

ajax.open("GET", "graph_2.php?_=" + Math.random() , true);