2012-07-31 32 views
0

我的web應用在Tomcat下運行,它非常緊張地使用AJAX請求,並且在開發過程中我也需要密集地重新部署Web應用。重新部署後,我通常只需刷新知道用戶會話被刪除的頁面,但我總是得到下面描述的情景:在刷新Tomcat中重新啓動的頁面之後,AJAX GET請求出現在URL欄中

  1. 去一些網頁,一個真正大頁許多JS-腳本包括,這實際上使這些密集的AJAX請求。
  2. 停止Tomcat或重新部署Web應用程序。
  3. 刷新頁面。
  4. 在登錄表單中輸入憑據進行身份驗證。
  5. 突然得到最後瀏覽器窗口中的AJAX請求響應和URL欄中的AJAX請求URL。

哇...這看起來很奇怪,我說AJAX請求的URL出現在他們的網頁中顯示區域響應沿網址欄。這實際上發生在Firefox和Chrome上(尚未在其他瀏覽器中測試過)。不幸的是,我無法在從零開始編寫的簡單頁面中重現相同的行爲。坦率地說,我真的不明白這樣的請求會發生什麼,以及爲什麼瀏覽器「思考」,如果用戶在網址欄中輸入AJAX請求/響應...

您對這種奇怪行爲的可能解釋或提示非常非常感激。謝謝!

(也許它可以幫助:所有的AJAX請求都用jQuery 1.4.2執行)

+0

什麼版本的Tomcat? – 2012-07-31 14:58:02

+0

@ChristopherSchultz,它發生在所有版本的Tomcat 6.0.x上,並且它可能在Tomcat 7上重現。現在我在6.0.32上。 – 2012-07-31 15:06:25

+0

這可能只是符合規範的基於FORM的身份驗證的行爲,儘管我期望**第一個** AJAX響應顯示在瀏覽器中,而不是最後一個。 – 2012-07-31 15:10:39

回答

0

我很抱歉,因爲我後來才明白,這個問題是不完整的,因爲還有另一個陷阱我沒有提到,所以沒有人原則上不能回答這個問題。該錯誤的原因是隱藏在... <body onunload="...">標籤定義。這是非常意想不到的,但該代碼包含一些AJAX請求,當用戶離開頁面時必須調用該請求。我只意識到驗證模塊(FORM,j_security_check)返回了包含Location標題的響應(HTTP 302) - 所以這就是爲什麼瀏覽器確實重定向的原因

確切的情況是這樣的:

  • 打開包含<body onunload="some_ajax_here">的頁面。
  • 使用另一個標籤註銷應用程序,以便您可以保持在同一頁面上。
  • 刷新頁面,以便一些Ajax可調用 - 這AJAX請求現在不允許的,因爲它的應用程序(你的登錄頁面的內容轉發)的安全部分。
  • 輸入憑據,現在您可以直接在瀏覽器窗口中獲得某些ajax的結果。

隨着速戰速決,我希望最後一個,我添加了以下其他請求AJAX請求:

$.ajax({ 
    async: true, 
    method: "GET", 
    url: document.location.pathname + document.location.search 
}); 

所以HTML網頁腳本只是使自我頁面請求的最後一個 - j_security_check返回Location引用上次使用的HTML頁面,重定向工作正常。也許我的解釋不清楚,可能並不完整,甚至不完全是錯誤,但總的來說看起來就像這樣。我再次非常抱歉,謝謝你@ChristopherSchultz!