关于验证码的刷新问题??

[color=red]javascript代码:[/color]
<br> function changeimg() {<br> document.getElementById(&quot;pic&quot;).src=&quot;&lt;%=basePath %&gt;struts2!struts2.action&quot;;<br> }<br> <script></p> <p>[color=red]html代码:[/color]<br> <img src="<%=basePath%>struts2!struts2.aciton&quot; id=&quot;pic&quot; onclick=&quot;javascript:changeimg();&quot; /&gt;</p> <p>[color=red]java后台代码:[/color]&quot;&lt;%=basePath%&gt;struts2!struts2.aciton,由此action中的一个方法生成一个随机图片。</p> <p>我的操作如下:<br> 1)每一次刷新页面img位置处出现随机新的验证码。<br> 2)点击图面本身触发js函数,函数将action路径从新赋给img让其生成新的随机图片。</p> <p>问题出在第二点上,我点击图片触发了函数(用alert(&quot;到了&quot;)做了测试)但是验证码并没有改变。。<br> 是&lt;<cument.getElementById("pic").src="<%=basePath %>struts2!struts2.action&quot;;&gt;&gt;的问题吗?</p> <p>环境IE7和火狐中国版。</p>

因为浏览器缓存问题

<br> function changeimg() { <br> var date = new Date();<br> document.getElementById(&quot;pic&quot;).src=&quot;&lt;%=basePath %&gt;struts2!struts2.action?a=&quot;+date.getTime(); <br> } <br> <script> </p>

可能是缓存了请求吧

你在这个action的url后面加上参数,带上[color=red]当前时间参数[/color]

document.getElementById("pic").src="<%=basePath %>struts2!struts2.action?date=" + new Date().getTime();

缓存问题,只要每次替换请求就可以了,方法就是在请求连接后面添加一个每次都变化的又不影响action相应的参数即可.
上面都是这种做法的一种演示 .

建议你用ajax实现,你这样写根本都没有ajax代码,虽然貌似是ajax。

楼上的都说是缓存,如果不是,就换换js代码,用ajax代码吧。

你先到后台设置断点看是否已经生成了新的验证码.排除服务器后台没有生成验证码的原因后,那就是前台页面的问题了.你可以动态替换图片区域.让他访问新的请求

验证码图片不变是因为浏览读缓存..因此要加上个时间戳

你是直接JS的话可以这样,
document.getElementById("pic").src="<%=basePath %>struts2!struts2.action?timeParam="+new Date().getTime();

以下是用JQuery换验证码图片.点刷新触发函数changeImg(),供参考;
[code="java"]function changeImg(){

var imgSrc = $("#imgObj");

var src = imgSrc.attr("src");

imgSrc.attr("src",chgUrl(src));

}

//时间戳

//为了使每次生成图片不一致,即不让浏览器读缓存,所以需要加上时间戳

function chgUrl(url){

var timestamp = (new Date()).valueOf();

url = url.substring(0,17);

if((url.indexOf("&")>=0)){

url = url + "×tamp=" + timestamp;

}else{

url = url + "?timestamp=" + timestamp;

}

return url;

} [/code]