2010-07-13 4 views
1

Как я понимаю и использовал его, AJAX используется для отправки запросов от клиента на сервер и последующего обновления HTML DIV на клиенте с новым контентом.Использование ajax для вызова сервлета

Тем не менее, я хочу использовать AJAX от клиента к сервлету, чтобы проверить наличие URL-адреса. Если результат плохой, я могу установить сообщение об ошибке в сервлет и вернуть его на страницу клиента для отображения.

Но знает ли кто-нибудь, если в случае положительного результата я могу заставить сервлет автоматически отображать на странице другую (следующую) страницу? Или если запрос будет вызван Javascript на клиенте, когда будут получены положительные результаты.

С благодарностью

Mr Morgan.

ответ

0

В своем успешном обратном вызове (на клиенте) установите для self.location.href новый URL.

+0

Спасибо. Он работает очень хорошо. Я попробовал это через сервлет и отобразил вызываемую страницу на вызывающей странице. Но self.location.href работал нормально. –

0

HTML - это технология «pull»: ничто не отображается в браузере, который браузер ранее не запрашивал с сервера.

Следовательно, у вас нет возможности «заставить сервлет автоматически отображать другую страницу». Вы должны поговорить с вашим браузером (с JavaScript) и запросить другую страницу.

1

Поскольку ваш вызов ajax выполняется в фоном результатом, возвращаемым сервлет, возвращается к вызову ajax, который затем должен действовать соответственно результату. например вызвать отображение другой страницы. (Который мог бы быть уже в AJAX ответ, а затем вы можете показать его в DIV или IFRAME или ...)

1

Согласно W3 specification, XMLHttpRequest заставляет WebBrowser на новое место, когда сервер возвращает fullworthy 301/302 и Same Origin Policy нового запроса. Однако это происходит не в некоторых браузерах, как в некоторых версиях Google Chrome.

Чтобы достичь наилучшего результата кроссбраузера, также, когда перенаправленный URL-адрес не соответствует правилам , вы хотели бы изменить местоположение на стороне JavaScript. Вы можете в конечном итоге позволить своему сервлету отправить статус и новый 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 кстати Google Gson что облегчает преобразования объектов Java в формате JSON)

, а затем в Ajax обработчик успеха обратного вызова в JS:

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

Вы только что попробовали объект в Chrome, IE, Opera, Safari и Firefox, и все выглядит хорошо. но еще многое предстоит сделать, я буду помнить об этом. –

+0

Я бы не стал полагаться на это, вы также можете зависеть от версии браузера. Просто выполните перенаправление в JS вместо использования 'window.location'. – BalusC