2010-02-18 57 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調用時,我究竟在尋找什麼? (這是我怕我最弱的點)

...唔...