创建了新图像,但显示的是旧图像JS(AJAX)
New image is created but the old one is shown JS(AJAX)
我有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代码来创建一个图。第一次它工作得很好,但当用户更改图形参数并再次按下按钮时(页面不会重新加载),它会显示旧图形,甚至在服务器中创建并保存了新图形。
这可能是因为浏览器的缓存。浏览器将您计算机上的图像副本保存在临时目录中。由于此映像与上一版本具有相同的名称和位置,因此它从磁盘加载映像,从而更快地加载分配(无需再次下载)
解决方案非常简单。将imagename更改为某个变量。一个广泛使用的技巧是添加一个随机值:
是否返回image.jpg而不是image.jpg_randomString此处
随机字符串可以基于以下几点。在php中,我喜欢使用uniqid()
,因为它总是唯一的(除非有人刷新速度超过1毫秒)。另一种方法是(如下面的评论中所建议的)时间戳。在php中,time()
就足够了。
如果你想要一个javascript解决方案,你可以在image.src = image.src +'?'+ Math.random()
的所有行中做一些事情
我突然想到,这可能是AJAX调用本身。您可以在AJAX调用中使用上面所述的javascript建议,使每个调用都具有唯一的
Math.random()文档
这是由于缓存问题,您可以像jquery cache:false
处理它一样,通过向您的uri添加一个随机值来处理它。
ajax.open("GET", "graph_2.php?_=" + Math.random() , true);
相关文章:
- 将图像上传ajax与表单提交ajax相结合
- 获取ajax加载的图像的大小
- 使用FormData上传AJAX图像;t在服务器端显示图像
- Javascript/jQuery压缩一个图像正确的评论帖子,并使用Ajax Laravel 5.2保存到控制器中
- 使用formData使用ajax将图像插入数据库
- ajax加载()后,包含图表的图像不会重新绘制
- 如何缓存AJAX请求的图像
- Ajax调用,发送图像和其他数据
- Codeigniter:通过Ajax上传图像并存储在数据库中
- 如何通过ajax php将图像上传到服务器本地目录,其中html表单haven't任何传统的提交按钮
- jQuery-更新jQuery.ajax().done()中点击的图像
- 使用jquery/ajax显示加载图像
- ajax缓存false无法加载图像
- 如何通过内容类型为“image/jpeg”的 AJAX 调用将画布图像从 GUI 保存到后端
- 在显示页面之前使用 jquery ajax 加载图像和声音
- 如何为 ajax 生成的图像设置绝对定位
- 如何在没有 Ajax 的情况下将图像拖放到 servlet
- 使用ajax将图像上传到文件数据库有疑问
- 将座位号添加到图像ajax、JavaScript中
- CodeIgniter ajax上传图像(ajax工作,而不是CodeIgniter)