문제

대부분의 요청이 Ajax를 통해 제출되는 신청서가 있지만 일부는 "정기"HTTP 요청을 통해 제출됩니다. 요청이 제출되고 사용자 세션이 시간이 초과되면 다음 JSON이 반환됩니다.

{"authentication":"required"}

모든 AJAX 요청을 제출하는 JavaScript 함수는 팝업 메시지를 표시하고 사용자를 로그인 페이지로 다시 리디렉션 하여이 응답을 처리합니다.

그러나 비 Ajax 요청 이이 응답을 받으면 JSON은 브라우저에 직접 처리되기 때문에 JSON이 브라우저에 간단하게 표시됩니다 (즉, 위에서 언급 한 JavaScript 함수는 우회되어 있음). 분명히 이것은 이상적이지 않으며 AJAX 요청과 동일하게 행동하기 위해이 응답을받는 비 Ajax 요청을 원합니다. 이를 달성하기 위해 두 가지 옵션을 생각할 수 있습니다.

  1. 응용 프로그램을 살펴보고 모든 요청을 AJAX 요청으로 변환하십시오. 이것은 효과가 있지만 시간이 오래 걸릴 수도 있습니다!

  2. 위에 표시된 JSON은 매우 간단한 JSP에 의해 생성됩니다. 브라우저에 컨텐츠가 표시되기 직전에 실행되는이 JSP에 JavaScript 이벤트 핸들러를 추가 할 수 있는지 궁금합니다. AJAX 요청에 대해 절대 요구되지 않을 것이라고 가정합니다. 이 핸들러는 팝업을 표시하고 리디렉션을 수행하는 다른 JavaScript 코드를 호출 할 수 있습니다.

누군가 (2)에 설명한 핸들러를 정확히 구현할 수있는 방법을 알고 있거나 다른 잠재적 솔루션이 있으면 전달하면 매우 감사합니다.

건배, 돈

도움이 되었습니까?

해결책

그런 식으로 JSP에 핸들러를 추가 할 수 없습니다. 당신이 그것을 추가하면 json이 아닌 생산 페이지가됩니다.

내가 볼 수있는 두 가지 옵션이 있습니다. 출력을 수정하는 화면에 URL 매개 변수를 추가하여 페이지에 매개 변수를 추가하십시오.

URL : http : //domain/page.jsp? ajaxrequest = trueJSON 만 출력합니다

URL : http : //domain/page.jsp다른 페이지로 전달할 수있는 JSP 페이지가 표시됩니다.

또는

웹 브라우저가 직접 맞는 경우 Web Browser에서 실행할 JSP에 전달 코드를 갖도록 응답을 변경하십시오. 그런 다음 호출 Ajax를 사용하여 전달 코드를 제거한 다음 남은 것을 처리하십시오.

다른 팁

3) AJAX 코드를 변경하여 GET 또는 게시물에 변수를 추가하십시오. outputJson=1

4) '수락'요청 HTTP 헤더를 읽으십시오.

그런 다음 서버 측에서 출력을 재단합니다.

예를 들어

if(Accept contains application/json...) { // client asking for json, likely  to be XHR
  return {"foo":"bar"}
} else { // other
  return "Location: /login-please";
}

다음과 같은 더 똑똑한 오류 메시지로 시작하십시오.

{"error":"authentication required"}

콜백에 JSON 출력을 감싸십시오.

errorHandler({"error":"authentication required"});

스크립트에서 핸들러가 기다리고 있습니다.

function errorHandler(r) {
   alert(r.error);
}

그리고 그것을 다음과 같이 보내는 것을 잊지 마십시오 text/javascript 그리고 아닙니다 application/x-json.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top