0 0

Web开发中关于名称相同的图片连接3秒内不能刷新最新图片,而是被浏览器缓存的问题。请大家帮忙!10

今天做到一个功能,在后台管理系统中,用户详情页面里有给用户生成二维码图片的功能,进入详情页的时候,如果用户的二维码存在,就显示出来。如下:
<img id="InviteImage" src="<%=contextPath %>/uploadfile/mem/2dcode/invite/${idcontacts.id}.jpg"/>
<input name="button3" type="button" id="button3"     onclick="createInviteMatrix('<%=contextPath%>','${idcontacts.id }');"value="生成会员二维码" />
当button3点击的时候,会用ajax的方式请求到后台,为会员生成二维码图片,二维码以会员的Id命名,路径是固定的,成功返回后就在InviteImage这个img标签上显示出来。代码如下:
Action后台代码:
@RequestMapping
public@ResponseBody String createUserInviteMatrix(Integer id){
if (id==null || id<=0) {
return "参数错误";
}
boolean b=createInviteMatrix(id);
if (b) {
        return "success";
}else {
return "faild";
}
}
Ajax请求的代码:
function createInviteMatrix(path,id){
$.ajax({
type : "POST",
url : path+"manage/info/idcontacts/createUserInviteMatrix.do",
data : {id:id},
success : function(msg) {
if(msg=="success"){
alert("生成成功");
url=path+"uploadfile/mem/2dcode/invite/"+id+".jpg?"+Math.random();
$("#InviteImage").attr("src",url);
}else{
alert("生成失败!");
}
},
error : function(XMLHttpRequest, textStatus, errorThrown) {
alert("XMLHttpRequest"+XMLHttpRequest+"_textStatus"+textStatus+"_errorThrown"+errorThrown);
}
});
}

问题来了,因为是用ajax方式提交,所以页面是没有刷新的,当成功生成二维码并返回的时候,给img标签设置图片地址始终没反应,比如会员二维码不存在的时候是找不到图片的,就是显示的一个红叉叉,但生成了图片之后就应该能找到了,但$("#InviteImage").attr("src",url);还是没反应,我甚至怀疑是后台没有生成完图片就返回了,导致找不到图片。我尝试了很多次,终于找到了原因所在,确实跟后台没有关系,因为img标签本身的图片连接就是图片路径加会员Id,赋值的时候同样是赋的这个,所以被浏览器缓存了,我赋值时候又在地址后面加了一个随机数,同样还是不行。
然后我在成功返回的时候写了一个setTimeOut隔3秒才去调用$("#InviteImage").attr("src",url);,结果果然成功了,图片换过来了。我又尝试着改1秒,2秒甚至是2.5秒,都没用,必须是3秒以上,我给JSP页面加了上禁止缓存的标签,依旧没用,三秒之内这个连接似乎被浏览器吃定了,不管你到底有没有设置缓存不缓存,3秒之内,似乎两次相同的请求连接都被强制缓存了,相同的连接不管怎么给img标签赋值,都被它给拦下了,怎么弄都没有反应。然后我又尝试去掉定时器,直接调用$("#InviteImage").attr("src",url);但是是在进入页面的时候不去点按钮,等待3秒后再去点,果然又成功了。这也更加证明了我的想法。似乎必须要在3秒之后才行。各位前辈,这到底是什么原因呢?虽然跟老大说明了情况,但老大还是要我解决,各位前辈有知道原因和解决办法的,麻烦告诉我一声啊,感激不尽!
2013年10月13日 11:43

1个答案 按时间排序 按投票排序

0 0

很显然你这个后台rest api是异步方式生成图片, 一般会有2-3秒的delay。
通常来说使用imagemagick解决方案的都会有这个问题。

2013年10月13日 17:54

相关推荐

    web项目页面缓存清除,不用每次刷新浏览器

    本资源包提供了关于"web项目页面缓存清除"的操作手册和相关资源,帮助开发者解决因缓存导致的问题,确保用户每次都能看到最新的网页内容,而无需手动刷新浏览器。以下是一些关键知识点: 1. **HTTP缓存机制**:HTTP...

    Loadrunner负载测试 浏览器缓存设置

    浏览器缓存是Web浏览过程中的一个重要部分,它存储了用户访问过的网页资源,如图片、JavaScript文件和CSS样式表等,以减少网络延迟,提升用户体验。在负载测试中,正确配置浏览器缓存能帮助我们更好地模拟真实的用户...

    js浏览器缓存.doc

    在进行Web开发的过程中,开发者可能会遇到一个较为隐蔽但十分常见的问题——浏览器缓存导致的重复请求失效现象。特别是使用某些JavaScript库(如Prototype.js)时,如果多次发出相同的GET请求,可能会发现除了首次...

    图片上传成功jsp页面不刷新问题

    在开发涉及图片上传功能的Web应用时,经常会遇到上传成功后页面不自动刷新的问题。这通常是因为浏览器缓存了图片请求,使得即便图片内容已经更新,浏览器显示的还是缓存中的旧图片。为了解决这个问题,通常会通过在...

    浏览器HTTP缓存机制

    - `no-cache`: 表明资源不能被缓存。 - `max-age=&lt;seconds&gt;`: 定义资源在浏览器中的最大有效期(以秒为单位)。 ##### 验证缓存 验证缓存依赖于`Last-Modified` 和 `ETag` 头部来确定缓存是否仍有效。 - **Last-...

    浏览器缓存策略Httpwatch

    在Web应用程序的层次结构中,缓存可以存在于多个级别,如数据库缓存、持久层缓存(如Hibernate的一级和二级缓存)、业务层缓存以及浏览器缓存。浏览器缓存,即HTTP Cache,主要针对用户界面层,对提高用户体验有着...

    浏览器缓存问题处理

    浏览器缓存是Web开发中一个重要的概念,它能够提高网页加载速度,减少网络带宽消耗,但同时也可能导致用户无法获取到最新的更新,特别是在项目发布时。本文将详细讲解浏览器缓存的工作原理,以及如何处理浏览器缓存...

    chrome浏览器禁止缓存

    在IT开发过程中,浏览器缓存是一项重要的功能,它能够提高网页加载速度,为用户提供更流畅的浏览体验。然而,对于开发者来说,缓存有时会带来麻烦,特别是在进行迭代开发、测试新功能或修复bug时,浏览器缓存可能...

    Flex客户端IE浏览器缓存问题

    然而,当使用Flex开发的SWF文件部署到服务器时,可能会遇到一个常见的问题:在Internet Explorer(IE)浏览器中,用户可能无法获取到服务器端最新更新的SWF版本,而是继续显示旧的缓存版本。这个问题主要涉及到...

    两次请求相同的一个URL,会产生缓存问题。

    2. **强制刷新**:用户可能期望每次请求都获取最新数据,但浏览器可能遵循缓存策略,不发送新请求。 3. **缓存覆盖**:如果两个不同的URL返回了相同的内容,但缓存策略不同,可能会导致一个URL的缓存覆盖另一个的。 ...

    基于JavaScript判断浏览器到底是关闭还是刷新(超准确)

    在Web开发过程中,有时候需要区分用户是关闭了浏览器窗口,还是仅仅刷新了页面,这对于执行某些特定的逻辑操作是很重要的。例如,当用户关闭浏览器窗口时,可能需要保存用户的会话状态,或者通知服务器用户已经离开...

    Ajax中浏览器的缓存问题解决方法

    Ajax技术在网页开发中被广泛用于实现异步数据交换,其核心在于无需刷新整个页面即可从服务器获取所需数据。然而,浏览器的缓存机制可能会导致Ajax请求无法每次都从服务器端获取最新的数据,这就引出了浏览器缓存问题...

    简易web浏览器,基于安卓Webkit开发的,可以看看。

    【简易Web浏览器开发详解】 基于安卓Webkit的简易Web浏览器是一种轻量级的应用程序,它允许用户在移动设备上浏览互联网内容。Webkit是谷歌Chrome和苹果Safari浏览器背后的渲染引擎,也是Android系统内置的网页浏览...

    安卓开发的web浏览器框架

    在安卓平台上,开发一款Web浏览器框架主要涉及到的关键技术点包括Android SDK、WebView组件、网络请求处理、用户界面设计以及性能优化。以下是对这些知识点的详细解释: 1. Android SDK:这是开发所有Android应用的...

    一款用MFC编写的Web浏览器

    标题中的“一款用MFC编写的Web浏览器”指的是利用Microsoft Foundation Classes (MFC)库开发的网络浏览器软件。MFC是微软提供的一套C++类库,它将Windows API封装成面向对象的形式,使得开发者可以更高效地构建...

    j2ee maven 结合gulp构建工具构建 war 自动刷新浏览器缓存

    总结来说,通过结合J2EE、Maven和Gulp,我们可以创建一个高效的开发流程,其中Maven负责管理依赖和打包,Gulp则处理前端构建任务,包括自动刷新浏览器缓存,从而提高开发效率和用户体验。理解并熟练掌握这些工具的...

    vb简单的web浏览器

    在给定的“vb简单的web浏览器”项目中,我们看到一个基于VB开发的简易Web浏览器。这样的程序可以作为一个学习项目,帮助开发者理解网络浏览的基本原理,同时也可以作为一个基础工具,供个人或小规模使用。 这个简单...

    jQuery图片浏览器源码

    jQuery图片浏览器源码是一种基于流行的JavaScript库jQuery开发的图片查看工具。它允许用户在网页上以优雅的方式...通过学习和理解源码,开发者不仅可以创建自己的图片浏览器,还能提升对jQuery和Web开发的深入理解。

    易语言 WEB浏览器 2.0 支持库

    《易语言WEB浏览器2.0支持库:深入解析与应用》 易语言,作为一款国内自主开发的编程语言,以其简单易学的特性深受初学者和开发者喜爱。在易语言的生态系统中,支持库扮演着至关重要的角色,它们扩展了语言的功能,...

    自制web浏览器,免费下载

    【自制Web浏览器,免费下载】 在信息技术领域,创建自己的Web浏览器是一项挑战性的任务,但也充满了学习和创新的乐趣。本项目采用C#编程语言,结合C#的网络编程技术,为用户提供了这样一个自制的Web浏览器。C#是...

Global site tag (gtag.js) - Google Analytics