【发布时间】:2010-02-18 03:56:44
【问题描述】:
您好!
我在通过 ajax 调用从 servlet 获取验证码的文本值时遇到问题。
当我的验证码被创建时,它的文本值被写入会话,但是通过 ajax 调用刷新图像本身后,我只得到一个旧的文本值。
刷新图像本身可以正常工作,但我无法在后续调用中从会话中获取正确的值。
在页面重新加载时,我得到了新的图像和它的新文本值,但 ajax 并没有什么乐趣。
这非常适合图像刷新:
$("#asos").attr("src", "/ImageServlet?="+((new Date()).getTime()) )
这个调用另一个获取文本值的方法给了我旧的东西:
$.ajax({
url:"checkCaptcha",
type:"GET",
cache: false,
success: function( data) {
alert(data);
}
});
我们将不胜感激。
ps:这是获取调用的方法的核心:
PrintWriter out = response.getWriter();
response.setContentType("text/html");
response.setDateHeader("Expires", 0 );
// Set standard HTTP/1.1 no-cache headers.
response.setHeader("Cache-Control", "no-store, no-cache, must-revalidate");
// Set IE extended HTTP/1.1 no-cache headers (use addHeader).
response.addHeader("Cache-Control", "post-check=0, pre-check=0");
// Set standard HTTP/1.0 no-cache header.
response.setHeader("Pragma", "no-cache");
out.print( request.getSession( ).getAttribute("randomPixValue") );
out.close();
【问题讨论】:
-
使用 FireBug 检查幕后发生的事情
-
您使用的是第 3 方验证码 API 还是自己开发的 API?如果是第 3 方,是哪一个?您还确定他们都使用相同的会话吗?在图像和验证码 servlet 中调试/打印
session.getId()。你确定验证码 servlet 被调用了吗?调试doGet()方法。 -
...这是一个小型、简单、自家种植的。稍后会检查其余的,今天早上忘记提交最新版本:-(
-
@BalusC - 如果您可以将其作为答案,我会接受。你为我指明了正确的方向。我需要图像 servlet 的完整路径。