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