2011-09-04 6 views
55

서버가 요청에 응답하기 전에 오류가 표시되기까지 브라우저는 얼마나 오래 기다릴 수 있습니까? 이 시간은 무제한이 될 수 있습니까?ajax 요청 후 브라우저는 얼마나 오래 기다릴 것입니까?

+2

회원님이 사용하고 있지만, 예 당신이 제한 시간을 연장 할 수 있는지 확인합니다. 무한하려면, 나는 모른다. 무제한 시간을 사용하지 말 것을 권장합니다. 필요한 경우 90 초 또는 약간 더 길게 설정할 수 있습니다. 30 초보다 오래 걸리면, 뭔가를하는 것이 더 빠르고 더 빠른 방법 일 것입니다. – Matt

+1

+1 - 나는 또한 이것에 대해 궁금합니다. 나는 당신이 클라이언트 시간 초과에 대해 걱정할 필요가 있다고 생각했다. 너는 이것에 대한 통제권이 없다. Google 검색 결과가 나타났습니다. 기본적으로 서버 또는 브라우저가 시간 초과 될 수 있습니다. 그래서 나는 모든 브라우저의 기본값이 초과하지 않을 것을 선택합니다. http://support.microsoft.com/kb/813827 – mrtsherman

+0

디버깅을 할 때 나는 아약스 호출 후 점심 식사에 나가서 여전히 회신을 기다리는 브라우저로 돌아왔다. 내 디버거를 클릭하면 브라우저가 응답을 선택했습니다. 내가 디버깅을했기 때문에 나는 이것이 중요하다고 생각하지 않는다. –

답변

62

jQuery $ .ajax 호출을 사용하는 경우 요청이 시간 초과 상태와 함께 반환되기까지의 시간을 제어하는 ​​timeout 속성을 설정할 수 있습니다. 제한 시간은 밀리 초 단위로 설정되므로 매우 높은 값으로 설정하십시오. "무제한"으로 0으로 설정할 수도 있지만 제 의견으로는 대신 높은 값을 설정해야합니다.

참고 : 무제한은 actually the default이지만 대부분의 브라우저에는 적중 될 기본 시간 제한이 있습니다.

시간 초과로 인해 ajax 호출이 반환되면 필요한 경우 별도의 대소 문자로 처리 할 수있는 "시간 초과"오류 상태와 함께 반환됩니다.

그래서 3 초 시간 제한을 설정하고 여기에 타임 아웃을 처리하려는 경우 예는 다음과 같습니다

$.ajax({ 
    url: "/your_ajax_method/", 
    type: "GET", 
    dataType: "json", 
    timeout: 3000, //Set your timeout value in milliseconds or 0 for unlimited 
    success: function(response) { alert(response); }, 
    error: function(jqXHR, textStatus, errorThrown) { 
     if(textStatus==="timeout") { 
      alert("Call has timed out"); //Handle the timeout 
     } else { 
      alert("Another error was returned"); //Handle other error type 
     } 
    } 
});​ 
+5

'timeout'값을 '0'으로 설정하면 AJAX 시간 초과가 무한 기간 (읽기 제한 없음)으로 설정됩니다. – John

+0

@ 존 또는 전혀 설정하지 않음 (기본값은 0입니다). –

+0

"시간 초과"가 아닌 textStatus에서 "오류"가 나타납니다. – UmaShankar

3

달성하려는 목표에 대해 좀 더 설명 할 수 있습니까? 서버에서 장기간 실행되는 프로세스가 있습니까, 로컬 시스템에서만 설정을 변경 하시겠습니까, 아니면 관리 할 방법이 있습니까? 그것은 많은 사용자를위한 것입니까?

브라우저가 대기하는 시간은 여러 가지 요인에 따라 달라집니다. 시간 초과가 발생하는 곳 - TCP 수준, 서버 또는 로컬 브라우저에서입니까?

서버에서 오랫동안 실행중인 프로세스가 있고 이후에 웹 페이지를 업데이트하려는 경우 일반적으로 긴 프로세스를 비동기 적으로 실행하고 클라이언트가 완료 될 때이를 알리는 등의 일반적인 방법이 있습니다. 서버를 폴링하는 ajax 호출을 사용하거나 HTTP 1.1을 사용하여 클라이언트에 알림 스트림을 제공하십시오.

어느 경우 든 여전히 연결을 닫을 수 있으므로 클라이언트는 여전히 연결을 다시 열어야합니다.

14

예 아니요. 예, 서버가 그렇게 할 수 있거나 그렇게하도록 구성 할 수 있습니다. 브라우저 (버전/배포자 세부 사항에 대해 잘 모릅니다)에서 시간 초과가 활성화되었을 수 있습니다.

이 개 솔루션이 있습니다하지만/달성 HTTP를 통해이 문제를 에뮬레이트 :이 장기 실행 스크립트가 당신이 갈 길을 밤은 결과를 기다리고있는 간단한 경우

  • , 당신은 대신으로해야 이전 게시자는 언급 한 결과에 대한 서버 폴링과 함께 비동기 처리를 사용합니다. 이는 훨씬 더 확실한 화재 솔루션이 될 것입니다. 예 : 이미지 프로세서 서버 측의 축소판 스크립트 : 사용자가 서버가 imidiatly 200 및 "Job ID"를 반환하는 이미지를 업로드합니다. 클라이언트 (javascript ^^)는 JobID를 사용하여 작업 상태/결과를 요청할 수 있습니다.
  • 브라우저와 서버 간의 실시간 연결 (일방 통행 연결)을 사용하는 것이 목표라면 브라우저가 요청하면 새로운 요청 (ajax ^^)을 사용하지 않고 추가 정보를 보낼 수 없습니다.) 긴 폴링/역방향 아약스라고하며 http를 통한 실시간 통신에 사용될 수 있습니다. 병렬로 2 개의 긴 폴링 요청을 사용하는 기술이 여러 개 있으므로 한 개는 시간 초과되고 두 번째는 활성화되고 첫 번째는 다시 연결을 시도합니다.
+1

큰 응답, thanks –

2

정상적인 (HTML 페이지) 요청의 경우 브라우저가 cca 이후에 시간 초과되도록 실행됩니다. 30 초. 프록시를 사용하는 다른 참가자 (프록시가이 게임에서 라우터를 사용합니까? 확실하지 않음)가 중요하기 때문에 중요합니다. 4 초 긴 서버 측 지연 (클라이언트에 보낼 것이없는 경우)을 사용하고 있으며 내 AJAX 클라이언트는 즉시 다른 HTTP 요청을 수행합니다 (로컬 네트워크에 있습니다. 인터넷 지연이 없습니다). 4 초는 서버와 네트워크에 자주 폴링하는 것을 방지하기에 충분히 길며, 클라이언트가 감지하고 처리 할 수없는 행에서 폴링이 하나라도 빠지면 케이스에 대해 충분히 짧습니다.

또한 comet (긴 HTTP 요청)과 관련하여 브라우저의 동시 HTTP 요청 수 제한, 클라이언트 측 이벤트 처리 (즉시 서버로 전송해야 함), 서버/네트워크 탐지 및 복구 , 다중 사용자 처리 등.

관련 문제