2010-07-13 6 views
1

AJAX는 클라이언트에서 서버로 요청을 보내고 클라이언트의 HTML DIV를 새 콘텐츠로 업데이트하는 데 사용됩니다.ajax를 사용하여 서블릿 호출

그러나 URL의 존재를 확인하기 위해 클라이언트에서 서블릿으로 AJAX를 사용하고 싶습니다. 결과가 좋지 않으면 서블릿에 오류 메시지를 설정하고이를 표시하기 위해 클라이언트 페이지로 리턴 할 수 있습니다.

그러나 긍정적 인 결과가 나면 내 서블릿이 자동으로 다른 (다음) 페이지를 사용자에게 표시 할 수 있는지 알 수 있습니까? 또는 긍정적 인 결과가 수신되면 클라이언트의 Javascript에 의해 요청이 트리거되어야합니다.

감사합니다.

Mr Morgan.

답변

0

성공적으로 콜백 (클라이언트)에서 self.location.href을 새 URL로 설정하십시오.

+0

감사 :

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)); 

하고 JS에서 Ajax를 성공 콜백 핸들러 (즉 Gson 자바 변환의 부담을 덜어 방법 Google Gson JSON 사물입니다). 그것은 아주 잘 작동합니다. 서블릿을 통해이 작업을 시도했는데 호출 된 페이지에 호출 된 페이지가 표시되었습니다. 그러나 self.location.href는 정상적으로 작동했습니다. –

0

HTML은 "끌어 오기"기술입니다. 브라우저에서 이전에 브라우저에서 요청하지 않은 내용이 없습니다.

따라서 "서블릿이 자동으로 다른 페이지를 표시하게 할"기회가 없습니다. 자바 스크립트에서부터 다른 페이지를 요청하기 위해 브라우저와 대화해야합니다.

1

백그라운드에서 서블릿에 의해 반환 된 결과가 ajax 호출로 반환되므로 ajax 호출이 결과에 따라 작동해야합니다. 예 : 다른 페이지의 표시를 트리거합니다. (어떤 이미 아약스 응답에 있었을 수 있습니다 div 또는 iframe 또는 ...에서 표시 할 수 있습니다)

1

W3 specification, XMLHttpRequest에 따라 서버가 전체 값 301 반환하면 웹 브라우저를 강제로 새 위치로/302 리디렉션되고 새 요청의 Same Origin Policy이 충족됩니다. 특정 Google 크롬 버전과 같은 특정 브라우저에서는 실패합니다.

리디렉션 된 URL이 동일 원점 정책 규칙을 충족하지 못하는 경우 최상의 크로스 브라우저 결과를 얻으려면 JavaScript 측에서 위치를 변경하고 싶습니다. 결국 서블릿이 상태와 원하는 새로운 URL을 보내도록 할 수 있습니다. 예 :

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

크롬, IE, 오페라, 사파리 및 파이어 폭스에서이 기능을 사용해 보았습니다. 하지만 아직해야 할 일이 많아서 이것을 염두에 두겠습니다. –

+0

나는 그것을 의지하지 않을 것이다, 당신은 브라우저 버전에 또한 의존 할지도 모른다. 대신 JS에서 'window.location'을 사용하여 리디렉션을 수행하십시오. – BalusC

관련 문제