$ .ajax 오류가 시간 초과인지 확인


205

의 마법을 사용하고 jQuery.ajax( settings )있습니다.

그러나 타임 아웃 설정을 많이 한 사람이 있는지 궁금합니다.

기본적으로 요청에 대한 현지 시간을 나타내는 것이지만 시간 초과에 도달하면 아무것도 트리거 할 수 있습니까? 아니면 단순히 응답을 듣지 않습니까?

jQuery 사이트를 읽으면 인수가 전달되지 않았으므로 하나의 기능을 가진 간단한 설정처럼 보입니다. 어느 것이 좋습니다.

그러나 시간 초과에 도달하면 경고 또는 일부 기능을 트리거하고 싶습니다. 이 경우 오류 설정이 트리거되지 않음을 알 수 있습니다.

내 스 니펫은 다음과 같습니다.

$("form#testform").submit(function(){ 

 var allFormValues = $("form#testform").serialize(); 

   $.ajax({
    cache:false,
    timeout:8000,  // I chose 8 secs for kicks
    type:"POST",
    url:"someurl.php",
    data:allFormValues,
    error:function(){ alert("some error occurred") },
    success:function(response){ alert(response); }
   });

});

시간 초과로 더 많은 작업을 수행하는 방법을 아는 사람이 있습니까?

답변:


356

시간 종료 발생시 오류 이벤트 핸들러가 세 개의 인수 (xmlhttprequest, textstatus 및 message)를 사용하는 경우 상태 인수는 'timeout'입니다.

jQuery를 문서 :

두 번째 인수 (널 제외)의 가능한 값은 "timeout", "error", "not modified"및 "parsererror"입니다.

그러면 오류를 적절하게 처리 할 수 ​​있습니다.

이것을 보여주는 이 바이올린 을 만들었습니다 .

$.ajax({
    url: "/ajax_json_echo/",
    type: "GET",
    dataType: "json",
    timeout: 1000,
    success: function(response) { alert(response); },
    error: function(xmlhttprequest, textstatus, message) {
        if(textstatus==="timeout") {
            alert("got timeout");
        } else {
            alert(textstatus);
        }
    }
});​

jsFiddle을 사용하면 ajax 호출을 테스트 할 수 있습니다. 응답하기 전에 2 초 정도 기다립니다. 시간 초과 설정을 1 초로 설정하면 오류가 발생하고 'timeout'이라는 텍스트 상태를 오류 처리기로 다시 전달해야합니다.

도움이 되었기를 바랍니다!


3
다행 이네요! 예, 그들은 문서에서 그러한 상태 값을 숨 깁니다.
David Hoerster

102
그들은 문서에서 많은 것을 숨 깁니다.
Aaron

4
@JochemKuijpers Fiddler는 2 초 동안 대기하므로 1 초의 시간 초과가 발생합니다. 읽기 ....
Rickjaah

2
x, t, m var가 무엇인지 설명 할 수 있습니까?
bart

3
(x) mlhttprequest, (t) extstatus, and (m) essage
JupiterP5
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.