2010-07-13 72 views
1

據我瞭解並使用它,AJAX用於發出從客戶端到服務器的請求,然後用新內容更新客戶端上的HTML DIV。使用ajax調用servlet

但是,我想從客戶端使用AJAX到一個servlet來驗證URL的存在。如果結果不好,我可以在servlet中設置一條錯誤消息並將其返回到客戶端頁面以供顯示。

但是,有誰知道,如果是積極的結果,我可以讓我的servlet自動向用戶顯示另一個(下一個)頁面?或者,當收到積極結果時,應該由客戶端的Javascript觸發該請求。

謝謝

摩根先生。

回答

0

在成功回撥(客戶端)時,請將self.location.href設置爲新的URL。

+0

感謝。它工作得很好。我通過servlet嘗試了這一點,並在調用頁面上顯示了被調用頁面。但self.location.href工作正常。 – 2010-07-13 12:04:31

0

HTML是一種「拉」技術:瀏覽器中沒有顯示任何瀏覽器以前沒有從服務器請求過的內容。

因此,您沒有機會「讓servlet自動顯示不同的頁面」。您必須將您的瀏覽器(來自JavaScript)與請求不同的頁面。

1

由於您的ajax調用是在的背景中執行的,servlet返回的結果返回到ajax調用,然後調用ajax調用結果。例如觸發另一個頁面的顯示。 (這可能已經在阿賈克斯響應,然後你可以顯示它在一個div或iframe或...)

1

根據W3 specification,XMLHttpRequest迫使webbrowser到新的位置,當服務器返回一個完整的301/302重定向,並且滿足新請求的Same Origin Policy。然而,在某些瀏覽器(例如某些Google Chrome瀏覽器版本)中,這卻失敗

要獲得最佳交叉瀏覽器結果,當重定向的URL不符合相同來源策略規則時,您希望改爲在JavaScript方的位置。您最終可以讓您的servlet發送狀態和所需的新URL。例如。

Map<String, Object> map = new HashMap<String, Object>(); 
map.put("redirect", true); 
map.put("location", "http://stackoverflow.com"); 
response.setContentType("application/json"); 
response.setCharacterEncoding("UTF-8"); 
resposne.getWriter().write(new Gson().toJson(map)); 

(即Gson是通過簡化的Java轉換的方式Google Gson對象JSON)

,然後在JS阿賈克斯成功回調處理程序:

if (response.redirect) { 
    window.location = response.location; 
} 
+0

剛剛嘗試過Chrome,IE,Opera,Safari和Firefox等設備,看起來都不錯。但還有很多事情要做,所以我會牢記這一點。 – 2010-07-13 12:10:55

+0

我不會依賴它,你也可能依賴瀏覽器版本。只需使用'window.location'在JS中進行重定向。 – BalusC 2010-07-13 12:26:27