programing

AJAX 호출에서 302가 따르지 않습니다.

powerit 2023. 7. 27. 22:23
반응형

AJAX 호출에서 302가 따르지 않습니다.

저는 jQuery 1.6.2를 사용하여 같은 도메인의 페이지에 POST AJAX 요청을 하고 있습니다.이 페이지는 302를 다른 페이지로 리디렉션합니다.

이제 로컬 컴퓨터에서는 이 작업이 정상적으로 작동하지만 프로덕션 서버에서는 리디렉션이 수행되지 않으며 Chrome 검사기에서는 요청이 '취소'되었다고 합니다.

Javascript를 사용하지 않고 동일한 페이지를 방문하면 모든 것이 정상적으로 작동하며, 앞서 말했듯이 AJAX는 내 로컬 머신에서 작동하지만 프로덕션 서버에서는 작동하지 않습니다.

무엇이 이것을 유발하는지 아는 사람?

서버 간에 약간의 차이(OS X, Apache2, PHP5.3.6, 로컬 시스템의 HTTP, Ubuntu, Lighttpd, PHP5.3.3, 운영의 HTTPS)가 있지만 저에게는 아무런 차이가 없습니다.

리디렉션 코드의 버그로 인해 요청된 페이지가 https://인 동안 리디렉션이 https://로 이동한 것으로 나타났습니다.그러면 브라우저가 리디렉션을 따르지 않습니다.

function doAjaxCall() {
   $.ajaxSetup({complete: onRequestCompleted});
   $.get(yourUrl,yourData,yourCallback);
}

function onRequestCompleted(xhr,textStatus) {
   if (xhr.status == 302) {
      location.href = xhr.getResponseHeader("Location");
   }
}

귀하의 답변과 관련된 질문을 참조하십시오.아래 링크에서 답을 찾을 수 있습니다.

JavaScript에서 302개를 찾았습니다.

jQuery Ajax 호출 후 리디렉션 요청 관리 방법

저는 이것이 클라이언트가 아닌 서버 측의 문제라고 생각합니다.브라우저가 리디렉션을 따르지 않는 것이 올바릅니다.http그것이 에이잭스 요청을 할 때https그것은 보안상의 결함이 될 것이기 때문입니다.

다음과 같은 상대 경로를 사용하고 있다는 것을 깨달았습니다.HttpResponseRedirect('/path/to/')일부 계층에서 해당 URL 앞에 다음과 같이 추가되었습니다.http://접두사와 그것이 브라우저가 수신한 것입니다.http://example.com/path/to/

다음 사항을 확인해야 합니다.Location다음을 포함하여 전체 경로와 함께 응답 헤더로 전송됩니다.https://.

대답을 바탕으로 https://stackoverflow.com/a/8752354/698289 다음 코드가 매우 유용하다는 것을 알게 되었습니다.

$('body').ajaxComplete(function (e, xhr, settings) {
    if (xhr.status == 200) {
        var redirect = null;
        try {
            redirect = $.parseJSON(xhr.responseText).redirect;
            if (redirect) {
                window.location.href = redirect;
            }
        } catch (e) {
            return;
        }
    }
});

그런 다음 다음과 같은 JSON을 제공하면 됩니다.

{redirect: '/redirect/to/this/path'}

그리고.ajaxComplete브라우저를 리디렉션합니다.

명심하세요.$.ajax('complete')다음 이후 트리거$.ajax('success')또는$.ajax('error')

언급URL : https://stackoverflow.com/questions/6955308/in-an-ajax-call-302-is-not-followed

반응형