<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<script type="text/javascript" language="javascript">
   function changImage(){
      var imgTag=document.getElementsByTagName("img");
      imgTag[0].src="LogonFormServlet";
 
    }
</script>
</head>
<body>
<form action="CheckCodeServlet" method="post">
<h3>带有验证码的登陆界面</h3>
用户名:<input type="text" name="username"><br>
密码:<input type="password" name="password"><br>
验证码:<input type="text" name="check_code"><img name="change" src="LogonFormServlet"/>&nbsp;&nbsp;<span style="color:red" onclick="changImage()">看不清?</span><br>
<input type="submit" name="submit" value="登陆">
</form>
</body>
</html>上面是测试带有验证码的登陆界面,运行时没问题。在内联元素<span>处,当单击"看不清?"时,LogonFormServlet
没有被调用,所以验证码处没变化。这个该怎么解决??验证码程序LogonFormServlet没问题,刷新时能产生新的验证码。

解决方案 »

  1.   

    imgTag[0].src="LogonFormServlet";
    这一句换成:
    imgTag[0].src="LogonFormServlet?num=" + Math.random(); 
    试试。原理是加上一个随机数,防止浏览器使用缓存图片。
      

  2.   

    IE是有缓存的,图片名称,路径一样,不会刷新,在URL里面加上一个无关的变量,每次都不一样,就可以。无关变量有很多,楼上的随机数,还有时间的毫秒数,都是可以的。还有一种根本性的解决方法是:在Servlet里面加入以下代码。
    response.setContentType("text/html;charset=UTF-8");    //设置编码格式
    response.addHeader("pragma", "no-cache");    
    response.addHeader("cache-control", "no-cache");    //cache缓存的方法
    response.addHeader("expires", "0");    //如果有缓存,缓存时间为0
      

  3.   

    把验证码显示在一个iframe中 然后去刷新iframe就可以了。 。
      

  4.   

    支持2楼。还有,你在 span 上增加了click事件,为什么不写成 a 呢,你用 span 的话,还要用样式来显示一个鼠标的手型图标。
      

  5.   

    楼上所说的设置编码和禁用缓存在servlet中已经写好,这是任然无法重新获取验证码
      

  6.   


    依旧无法刷新是因为有之前的缓存没有被清除,在IE中用Ctrl + F5强制刷新一下就好了。就算我的答案不是最好的,为什么分数偏偏给了6楼而不是1楼呢?