programing

AJAX 요청이 "302 Moved" 응답을 받으면 어떻게 됩니까?

iphone6s 2023. 8. 20. 10:32
반응형

AJAX 요청이 "302 Moved" 응답을 받으면 어떻게 됩니까?

저는 백엔드를 수정하지 않고 오래된 웹사이트 양식을 AJAX로 수정하려고 합니다.원래 백엔드는 양식을 받은 후 "302 이동됨" 페이지로 리디렉션됩니다.

이제 jQuery $.ajax 호출을 사용하여 양식을 제출하려고 하면 양식 데이터가 성공적으로 제출되지만 "302 Moved" 리디렉션이 브라우저에 의해 취소되는 것처럼 보이고 jQuery는 무슨 일이 일어나고 있는지 알지 못합니다.

문제는 어떤 일이 있어도 $.dll 호출이 오류와 상태 = 0으로 반환되므로 성공적인 전송과 오류를 구분할 방법이 없다는 것입니다.

브라우저가 리디렉션을 따르려고 하거나 적어도 올바른 응답 코드를 가져오는 것을 방지하는 방법이 있습니까?(Chrome을 사용하고 있습니다.)

아니요, 백엔드를 바꾸지 않고는 할 수 없다고 생각합니다.Ajax가 무엇을 해야 하는지 알고 이해하려면 응답 헤더를 변경해야 합니다.리디렉션한 경우 Ajax 호출 응답이 수행하지 않으므로 헤더를 변경해야 합니다.

이것이 당신을 올바른 방향으로 인도할 수 있습니까?

$.ajax({
    type: "GET",
    url: url,
    data: data,
    complete: function(e, xhr, settings){
       if(e.status === 200){
            console.log(e.responseText);
       }else{
            console.log("error");
       }
   }
   });

백엔드 앱에 jquery agax에서 처리되지 않을 수 있는 상대적인 리디렉션이 있을 수 있습니다.이 경우 위치 헤더에는 도메인 이름이 포함되지 않고 상대 경로만 포함됩니다.일부(나에게는 분명하지 않음;) 이유로 인해 동일한 원산지 정책 문제가 발생할 수 있습니다.재미있는 것은 절대 경로로 리디렉션을 변경하면 문제가 해결된다는 것입니다.jQuery 1.11.1에서 테스트됨.

코드를 사용한 설명:

이론적인 아약스 호출:

$.ajax({
    'url': '/your-url',
    'method': 'post',
    'data': form.serialize()
}).done(function(data) {
    // something
}).fail(function(jqXHR, textStatus, errorThrown) {
    // another something
});

따라서 /your-url 컨트롤러에는 다음과 유사한 기능이 있을 수 있습니다.

return $this->response->redirect('//same.domain/path');

또는

return $this->response->redirect('/path');

첫 번째는 효과가 있을 겁니다.두 번째는 아닙니다.

그래요?

요점은 백엔드를 약간만 변경해야 한다는 것입니다.다른 방식으로 처리하거나 처리하지 않으려면 XmlHttpRequest가 요청인지 확인할 필요가 없습니다.

Ajax 코드는 다음과 같습니다.

$.ajax({
'url': '/your-url',
'method': 'post',
'data': form.serialize()
}).done(function(data) {
    // something
  }).fail(function(jqXHR, textStatus, errorThrown) {
if (jqXHR.getResponseHeader('Location') != null)
{ 
 window.Location= jqXHR.getResponseHeader('Location');
 }
 // other conditions in failure situation.
});

폼을 확인하고 {{csrf_field()}}. 토큰 없이 폼을 제출할 때 발생합니다.

언급URL : https://stackoverflow.com/questions/13129694/what-happens-when-an-ajax-request-gets-a-302-moved-response

반응형