사용자가 새로 고침을 클릭할 때 에이잭스 오류 처리
제가 찾아봐야 할 사항이라면 사과드립니다. 제가 원하는 모든 용어들이 너무 많은 것들이었습니다.
여기서 문제가 발생합니다.페이지를 열면 일련의 Ajax 콜이 모두 실행됩니다.그 후 Shift+Refresh를 누르면 모든 Ajax 콜이 오류로 간주되어 페이지 전체가 새로고침되기 전에 오류 메시지 대화상자가 나타납니다.
클라이언트에 의해 에러가 발생하고 있습니다.무시할 수 있는 방법이 없을까요?예를 들어 xmlhttprequest 또는 ajax 함수(jquery btw 사용 중)
이를 검출하기 위해 권장되는 접근법이 몇 가지 있습니다.
은 이 용어의 해 왔다.
beforeunload
에러 핸들러가 페이지가 언로드되고 있는 것을 인식할 수 있도록, 부울 플래그를 설정하는 핸들러입니다(아래의 관련/복제 투고 리스트를 참조해 주세요.iOS의 모바일 Safari가 이벤트를 지원하지 않는다는 점을 제외하면 매우 좋습니다.Sachindra는 에러 함수를 즉시 기동하는 대신에, 1초만에 지연되는 어프로치를 제안했습니다.
setTimeout(..., 1000)
좋은 라고 할 수긍정적으로 말하면 , '많이'라는 '많이'라는 큰 가 있을 예요. 예를 들어 많은 페이지 수가 많은 경우<input>
이 경우 언로드에 1초 이상 걸릴 수 있습니다.또, 에러 핸들러가 기동하는 경우도 있습니다.
따라서 신뢰할 수 있는 지원 검출과beforeunload
지원되지 않습니다(iPad/iPhone 기침). Sachindra의 지연 트릭으로 돌아갑니다.
「 」를 포함한 풀을 참조해 .beforeunload
검출 및 이 jsfiddle의 모든 것.
jQuery 2.x는 1.x보다 상황이 조금 나은 것 같습니다만, 2.x도 조금 불량한 것 같기 때문에 이 제안은 여전히 신중하다고 생각합니다.
의 일부 .S: 또한 일부 필드 테스트와 관련된 제안도 있었습니다.XHR
jqXHR
물건.(여기랑 여기)장기간에 걸친 AJAX 콜 실행 중에 사용자의 네비게이션과 웹 서버의 재기동을 구별할 수 있는 조합이 없기 때문에 이 접근방식은 도움이 되지 않습니다.
이는 관련된/중복된 스택오버플로우 질문에 대한 답변이기도 합니다.
- jQuery AJAX가 창 언로드 시 오류 콜백을 발생합니까?
- 브라우저 새로고침으로 인해 요구가 실패하면 $.120이 성공 핸들러를 호출한다.
- 사용자가 링크를 클릭했을 때 발생하는 jquery ajax 호출 중 오류를 가장 잘 처리하는 방법
- 페이지를 새로고침 중이기 때문에 jQuery.ajax 호출이 실패했음을 검출하시겠습니까?
Stack Overflow 외부에 있는 다음 게시물:
[그 후 풀었던 미해결 의문점들을 정리한 글입니다]
jQuery는 사용자가 새로 고침, 링크 클릭 또는 브라우저에서 URL을 변경하여 페이지를 이동할 때 오류 이벤트를 발생시킵니다.다음 유형의 오류를 검출하려면 ajax 콜의 오류 핸들러를 구현하고 xmlHttpRequest 개체를 검사합니다.
$.ajax({
/* ajax options omitted */
error: function (xmlHttpRequest, textStatus, errorThrown) {
if(xmlHttpRequest.readyState == 0 || xmlHttpRequest.status == 0)
return; // it's not really an error
else
// Do normal error handling
});
var isPageBeingRefreshed = false;
window.onbeforeunload = function() {
isPageBeingRefreshed = true;
};
$.ajax({
error: function (xhr, type, errorThrown) {
if (!xhr.getAllResponseHeaders()) {
xhr.abort();
if (isPageBeingRefreshed) {
return; // not an error
}
}
}
});
상기의 기술은, 정기적인 갱신 페이지(예를 들면, 0.5초마다)에서는 동작하지 않습니다.페이지 리프레시에 의한 에러는, 에러 처리를 조금 늦추는 것으로 회피할 수 있는 것을 알았습니다.
예:
$.ajax(...)
.success(...)
.error(function(jqXHR) {
setTimeout(function() {
// error showing process
}, 1000);
});
게다가
window.onbefore unload = function() {//stop ajax 호출}
이벤트는 Ajax 콜의 갱신 빈도가 낮은 경우에 사용할 수 있습니다.
의 조합된 버전 및 답변이 효과가 있었습니다.
예:
var isPageBeingRefreshed = false;
$(window).on('beforeunload', function(){
isPageBeingRefreshed = true;
});
$.ajax({
// Standart AJAX settings
}).error(function(){
if (!isPageBeingRefreshed) {
// Displaying error message
}
});
언급URL : https://stackoverflow.com/questions/699941/handle-ajax-error-when-a-user-clicks-refresh
'programing' 카테고리의 다른 글
AngularJS : 값이 다음 값보다 클 경우 ng-repeat 필터 (0) | 2023.03.06 |
---|---|
woo-commerce의 상점 URL을 변경 (0) | 2023.03.06 |
각도 JS를 사용하여 요소에 클래스 추가 (0) | 2023.03.06 |
tslint에 대해 특정 디렉토리 또는 파일을 무시하는 방법 (0) | 2023.03.06 |
POST 대신 OPTIONS로 전송된 Angular로부터의 HTTP 요청 (0) | 2023.03.06 |