programing

브라우저에서 AJAX(XmlHttpRequest) 콜의 타임아웃을 검출하려면 어떻게 해야 합니까?

css3 2023. 3. 11. 09:21

브라우저에서 AJAX(XmlHttpRequest) 콜의 타임아웃을 검출하려면 어떻게 해야 합니까?

웹에서 찾고 있는데 문서를 구하기가 어려워요.브라우저의 빌트인을 사용한 기본적인 AJAX 콜은 모두 알고 있습니다.XMLHttpRequest오브젝트(여기서 최신 브라우저를 참조):

var xmlHttp = new XMLHttpRequest();  // Assumes native object

xmlHttp.open("GET", "http://www.example.com", false);

xmlHttp.send("");

var statusCode = xmlHttp.status;
// Process it, and I'd love to know if the request timed out

그러면 브라우저에서 XMLHttpRequest 개체를 검사하여 AJAX 콜이 타임아웃되었음을 검출할 수 있는 방법이 있습니까?제가 어떻게 하라고 조언받을 수 있을까요?window.setTimeout(function() { xmlHttp.abort() }, 30000);?

감사합니다!

마이크

최신 브라우저(2012년) 중 일부는 이 기능을 통해setTimeout: XMLHttpRequest에 포함되어 있습니다.답변 https://stackoverflow.com/a/4958782/698168:

var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function () {
    if (xhr.readyState == 4) {
        alert("ready state = 4");
    }
};

xhr.open("POST", "http://www.service.org/myService.svc/Method", true);
xhr.setRequestHeader("Content-type", "application/json; charset=utf-8");
xhr.timeout = 4000;
xhr.ontimeout = function () { alert("Timed out!!!"); }
xhr.send(json);

업데이트: 다음은 타임아웃을 처리하는 방법의 입니다.

var xmlHttp = new XMLHttpRequest();
xmlHttp.open("GET", "http://www.example.com", true);

xmlHttp.onreadystatechange=function(){
   if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {
      clearTimeout(xmlHttpTimeout); 
      alert(xmlHttp.responseText);
   }
}
// Now that we're ready to handle the response, we can make the request
xmlHttp.send("");
// Timeout to abort in 5 seconds
var xmlHttpTimeout=setTimeout(ajaxTimeout,5000);
function ajaxTimeout(){
   xmlHttp.abort();
   alert("Request timed out");
}

IE8에서는 타임아웃이벤트 핸들러를XMLHttpRequest물건.

var xmlHttp = new XMLHttpRequest();
xmlHttp.ontimeout = function(){
  alert("request timed out");
}

코드대로 동기 호출을 하지 말 것을 권장합니다.또한 이를 위해 Javascript 프레임워크를 사용할 것을 권장합니다.jQuery가 가장 인기 있습니다.이를 통해 코드를 보다 효율적이고 유지보수가 용이하며 크로스 브라우저 호환성이 향상됩니다.

언급URL : https://stackoverflow.com/questions/1018705/how-to-detect-timeout-on-an-ajax-xmlhttprequest-call-in-the-browser