代码之家  ›  专栏  ›  技术社区  ›  vector

对servlet拼图程序的Ajax调用

  •  1
  • vector  · 技术社区  · 16 年前

    问候语!

    我在通过Ajax调用从servlet获取captcha的文本值时遇到问题。

    当我的captcha被创建时,它的文本值被写入会话,但是在通过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 回复  |  直到 16 年前
        1
  •  0
  •   BalusC    16 年前

    根据对问题的评论,这里有一份评论的副本,需要重新发布作为答案:

    您使用的是第三方验证码API还是国产验证码API?如果是第三方,哪一方?您确定他们都使用同一个会话吗?调试/打印 session.getId() 在图像和验证码servlet中。你确定呼叫了Captcha servlet吗?调试 doGet() 方法。

        2
  •  1
  •   BalusC    16 年前

    让servlet发送以下头文件:

    response.setDateHeader("Expires", 0);
    response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate");
    response.setHeader("Pragma", "no-cache");
    
        3
  •  0
  •   Hooray Im Helping codaddict    16 年前

    看起来您需要向URL添加文件扩展名。假设它是一个HTML页面,您要调用Ajax:

    $.ajax({
        url:"checkCaptcha.html",
        type:"GET",
        cache: false,
        success: function( data) {
            alert(data);
        }
    });
    
        4
  •  0
  •   vector    16 年前

    …进度报告:

    -会话ID:

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

    …这里有一些有趣的东西。 当我通过Ajax调用仅重新加载图像时,图像会重新加载,但方法不会打印到控制台。

    应该获取文本值的方法进行打印以控制旧值

    所以,图像会被重新加载,但不会打印到控制台。 文本值被打印出来,但它是旧的。

    当查看Firebug中的Ajax调用时,我到底在寻找什么?(恐怕那是我最脆弱的地方)

    …嗯…