问候!
我在通过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();
答案 0 :(得分:1)
让servlet发送以下标题:
response.setDateHeader("Expires", 0);
response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate");
response.setHeader("Pragma", "no-cache");
答案 1 :(得分:0)
您似乎需要在网址中添加文件扩展名。假设它是一个html页面,你正在调用ajax:
$.ajax({
url:"checkCaptcha.html",
type:"GET",
cache: false,
success: function( data) {
alert(data);
}
});
答案 2 :(得分:0)
...进度报告:
- 会话ID:
在服务器上调用的两种方法都打印相同的si FireBug还在初始页面加载和后续页面重新加载时显示相同的si 它们都打印相同的验证码文本值。
......这里有点有趣。 当我通过ajax调用仅重新加载图像时,图像被重新加载,但该方法不会打印到控制台。
应该获取文本值的方法会打印以控制旧值
因此,图像重新加载但没有任何内容打印到控制台 和文本值打印但它已经过时了。
在FireBug中查看ajax调用时,我到底在寻找什么? (这是我害怕的最弱点)
......嗯...
答案 3 :(得分:0)
根据对该问题的评论,这里是评论的副本,需要重新发布作为答案:
您使用的是第三方验证码API还是本土验证码?如果第三方,哪一个?你还确定它们都使用相同的会话吗?在映像和验证码servlet中调试/打印
session.getId()
。你确定已经调用了验证码servlet吗?调试doGet()
方法。