2010-02-18 81 views
1

问候!ajax调用servlet puzzler

我在通过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

使用FireBug检查现场背后发生的事情 – Bozho 2010-02-18 13:31:28

+1

您使用的是第三方的captcha API还是本地的?如果第三方,哪一个?你是否也确定他们都使用同一个会话?在图像和captcha servlet中调试/打印'session.getId()'。你确定captcha servlet被叫了吗?调试'doGet()'方法。 – BalusC 2010-02-18 14:31:12

+0

...这是一个小而简单的家庭成员。稍后会检查其余的,忘记提交最新版本今天早上:-( – vector 2010-02-18 14:57:01

回答

0

按照有关这个问题的意见,这里有一个需要被转贴作为回答评论的副本:

您使用的是第三方的captcha API还是本地的?如果第三方,哪一个?你是否也确定他们都使用同一个会话?在图像和captcha servlet中调试/打印session.getId()。你确定captcha servlet被叫了吗?调试doGet()方法。

0

看起来你需要将文件扩展名添加到您的网址。假设它是你正在做的Ajax调用一个HTML页面:

$.ajax({ 
    url:"checkCaptcha.html", 
    type:"GET", 
    cache: false, 
    success: function(data) { 
     alert(data); 
    } 
}); 
+0

...它没有被映射到html的,只是“checkCaptcha”,将按预期在重新加载页面时,值将追加到测试DIV – vector 2010-02-18 04:06:21

+0

@Hooray:他用JSP/Servlet的,不只是PHP/HTML 。左右 – BalusC 2010-02-18 14:30:10

+0

呀,我意识到,我张贴后,很抱歉的瘸腿反应 - 。证明人不应该在等待入睡回答问题 – 2010-02-18 14:37:22

1

让这个servlet发送以下标题:

response.setDateHeader("Expires", 0); 
response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); 
response.setHeader("Pragma", "no-cache"); 
+0

......试过张贴以及:-),没有快乐了。 – vector 2010-02-18 13:05:40

0

...进度报告:

- 会话ID :

在服务器上调用的两种方法打印相同的si FireBug在初始化时也显示相同的si页面加载和后续页面重新加载 它们都打印相同的验证码文本值。

...这里有一些有趣的事情。 当我通过ajax调用仅重新加载图像时,图像被重新加载,但该方法不会打印到控制台。

是应该得到文本值方法并打印到控制台的旧值

因此,图像被重新加载,但没有打印到控制台 和文本价值得到打印,但它的历史。

在FireBug中查看ajax调用时,我究竟在寻找什么? (这是我怕我最弱的点)

...唔...