ajax调用servlet puzzler

时间:2010-02-18 03:56:45

标签: jquery ajax servlets

问候!

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

4 个答案:

答案 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()方法。