programing

사용자가 새로 고침을 클릭할 때 에이잭스 오류 처리

css3 2023. 3. 6. 21:22

사용자가 새로 고침을 클릭할 때 에이잭스 오류 처리

제가 찾아봐야 할 사항이라면 사과드립니다. 제가 원하는 모든 용어들이 너무 많은 것들이었습니다.

여기서 문제가 발생합니다.페이지를 열면 일련의 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: 또한 일부 필드 테스트와 관련된 제안도 있었습니다.XHRjqXHR물건.(여기여기)장기간에 걸친 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