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
'programing' 카테고리의 다른 글
| 쓰기 출력을 사용할 때 글꼴 색을 지정하는 방법이 있습니까? (0) | 2023.08.20 |
|---|---|
| Progressive Enhancement란 무엇입니까? (0) | 2023.08.20 |
| PowerShell이 실패하고 업데이트가 발생함 (0) | 2023.08.20 |
| 각도 설계 패턴: MVC, MVVM 또는 MV*? (0) | 2023.08.20 |
| 데이터베이스 이름 규칙: DATTIME 열 (0) | 2023.08.20 |