2012-10-12 1 views
5

나는 적어도 IE9에서 진행 기능을 얻으려고 생각했지만 모두 시도했지만 아무 것도 작동하지 않습니다. 다른 모든 브라우저는 진행 기능에 들어가 테스트 텍스트를 아무런 문제없이 작성합니다. 잘만되면 누군가 나를 도울 수 있습니다. 고맙습니다!IE에 AJAX 진행 이벤트가 있으며 사용 방법은 무엇입니까?

 var info = document.getElementById('info'); 
    var xhr; 
     if (window.XMLHttpRequest) { 
      xhr = new XMLHttpRequest(); 
     } 
     else if (window.ActiveXObject) { 
      try { 
       xhr = new ActiveXObject("Msxml2.XMLHTTP"); 
      } 
      catch (e) { 
       try { 
        xhr = new ActiveXObject("Microsoft.XMLHTTP"); 
       } 
       catch (e) {} 
      } 
     } 
     xhr.attachEvent("onprogress", function(e) { 
      info.innerHTML += "loading...<br />"; 
     }); 

     /*xhr.addEventListener("progress", function(e) { 
      info.innerHTML += "loading...<br />"; 
     }, false);*/ 

     xhr.open("GET", "10_MB_File.txt", true); 
     xhr.send(null); 
+0

불행히도 <= IE9의 xhr에는 'progress' 이벤트가 없지만'typeof this.ProgressEvent === 'function''라는 조건으로 감지합니다. 'this'는 전역 객체 인'window'입니다. – Hydro

답변

2

onprogress 이벤트는 XMLHttpRequest 레벨 2 규격의 일부인 ...

... IE 9 이하. 그러나, IE 10 자세한 내용은 ...

을 지원하도록되어있는 지원 XHR 레벨 2, caniuse.com ...

+0

감사합니다. IE는 시대에 뒤떨어 지긴했지만 ... 그래, Windows8에서는 IE10이 나에게 진전을 보였다. – user1154269

+0

여러분을 환영합니다! 예 ... IE는 꽤 끔찍합니다. 교차 도메인 AJX를하고 있다면 조심하십시오! – Hristo

2

IE9 이하는 진행 중이므로 지원하지 않으므로 작동하지 않는 이유는 무엇입니까?

var xhr = new XMLHttpRequest(); 
console.log('onprogress' in xhr); 
+1

XMLHttpRequest의 새 객체를 만드는 이유는 무엇입니까? –

+2

2 행을 사용한 작업 데모이기 때문에. – epascarello

0

당신은 onreadystatechange 이벤트를 사용하여 메시지를 표시 할 수 있습니다. 나는 단지 그것을 해결 방법으로 제안하고있다.

xhr.onreadystatechange=function() { 
    if (xhr.readyState != 4) { 
     // Display a progress message here. 
    } else if (xhr.readyState==4 && xhr.status==200) { 
     // Request is finished, do whatever here. 
    } 
} 
+0

고맙습니다. 실제 프로그램에서, 대역폭 속도계,로드 된 초/바이트 초를 기반으로 속도 바늘을 회전해야하므로 ... – user1154269

0

제안 목록에 추가, 프로젝트에서 JQuery가 사용되는 경우. 그것은 아래의 함수에 의해 성취 될 수 있으며, JQuery $ .ajax 요청이 필요합니다. 이 클라이언트 라이브러리의 장점은 브라우저를 기반으로 인스턴스화 된 객체가 있다는 점입니다. 예 : JQuery는 브라우저를 기반으로하여 "ActiveXObject ("Msxml2.XMLHTTP ")"또는 "ActiveXObject ("Microsoft.XMLHTTP ")를 처리합니다.

//displays progress bar 
$('#info').ajaxStart(function() { 
    $(this).show(); 
}).ajaxStop(function() { 
    $(this).hide(); 
}); 
+0

예, 실제 프로그램에서 jQuery를 사용합니다. 그러나 IE = 9가 진행 이벤트를 지원하지 않는다면, 아무 라이브러리도 도움이되지 않는다고 생각합니까? 아니면 IE에서 어떤 식 으로든 진행률 (바이트로드)을 얻을 수 있습니까? – user1154269

+0

AJAX 조작을 위해 $ .ajax/$. get/$. post를 호출하면, 게시 한 ajaxStart() 함수가 진행률 표시 줄로 진행 이벤트로 작동합니다. 나는 IE 6을 위해 그것을 검사했고 잘 동작한다. – Sunny

+0

그러나 정적 콘텐츠 (image/html) 만 진행률 표시 줄로 표시합니다. 로드 된 바이트와 같이 실시간 진행이 필요하면 다른 대안을 검색해야합니다. 내가 읽은 기사 중 일부는 서버에서 응답을받은 후 90 % 진행률을 빠르게 표시 한 다음 나머지 10 %를 완료하여 사용자 인터페이스를 속이는 것입니다. – Sunny

관련 문제