【问题标题】:ajax call to servlet puzzler对 servlet 谜题的 ajax 调用
【发布时间】: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 的完整路径。

标签: jquery ajax servlets


【解决方案1】:

让 servlet 发送以下标头:

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

【讨论】:

    【解决方案2】:

    根据问题上的 cmets,这里是评论的副本,需要重新发布作为答案:

    您使用的是第 3 方验证码 API 还是自己开发的 API?如果是第 3 方,是哪一个?您还确定他们都使用相同的会话吗?在图像和验证码 servlet 中调试/打印 session.getId()。你确定验证码 servlet 被调用了吗?调试doGet() 方法。

    【讨论】:

      【解决方案3】:

      看起来您需要为您的网址添加文件扩展名。假设它是一个 html 页面,您正在调用 ajax:

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

      【讨论】:

      • ...它没有映射到 .html,只是“checkCaptcha”,当值附加到测试 div 时,在页面重新加载时按预期工作。
      • @Hooray:他正在使用 JSP/Servlet,而不仅仅是 PHP/HTML 左右。
      • 是的,我发帖后才意识到这一点。对不起,蹩脚的回答 - 证明人们不应该在等待入睡时回答问题。
      【解决方案4】:

      ...进度报告:

      - 会话 ID:

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

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

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

      所以,图像被重新加载,但没有打印到控制台 和文本值被打印,但它是旧的。

      查看 FireBug 中的 ajax 调用时,我到底在寻找什么? (恐怕这是我最薄弱的地方)

      ...嗯...

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-04-07
        • 2015-01-18
        • 1970-01-01
        • 1970-01-01
        • 2014-03-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多