2012-10-12 11 views
5

Próbowałem wszystkiego, co mogłem wymyślić, aby przynajmniej dostać się do funkcji postępu w IE9, ale nic nie działa. Wszystkie pozostałe przeglądarki uzyskują dostęp do funkcji postępu i bez problemu testują tekst testowy. Mam nadzieję, że ktoś może mi pomóc. Dziękuję Ci!Czy w IE występuje zdarzenie postępu AJAX i jak z niego korzystać?

 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

Niestety nie ma zdarzenia 'progress' w Xhr <= IE9, ale wykrywam je z tym warunkiem:' typeof this.ProgressEvent === 'function''. Gdzie 'this', jest' window', obiekt globalny. – Hydro

Odpowiedz

2

Impreza onprogress jest częścią XMLHttpRequest Level 2 specyfikacji ...

... który nie jest obsługiwany przez IE 9 i poniżej. Jednakże, IE 10 ma go wspierać ...

Aby uzyskać więcej informacji, na których przeglądarek obsługuje XHR Level 2, przyjrzeć caniuse.com ...

+0

Dziękuję. Po prostu nigdy, mimo że IE było tak przestarzałe ... Tak, w Windows8 IE10 pokazało mi postęp. – user1154269

+0

nie ma za co! tak ... IE jest dość okropne. jeśli robisz cross-domain AJX, strzeż się !!! – Hristo

2

IE9 i under nie obsługują onprogress, dlatego nie można go uruchomić.

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

dlaczego tworzysz nowy obiekt XMLHttpRequest? –

+2

Ponieważ jest to działające demo z 2 liniami. – epascarello

0

można użyć zdarzenia onreadystatechange i wyświetlania wiadomości. Po prostu sugeruję to jako obejście.

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

Dziękuję. W aktualnym programie, prędkościomierzu prędkości, muszę obrócić igłę prędkości w oparciu o załadowane bajty/minęły sekundy, więc ... – user1154269

0

Dodawanie do listy sugestii, jeśli JQuery jest używany w projekcie. Można to osiągnąć za pomocą poniższych funkcji i oczywiście musi to być żądanie .ajax JQuery $. Zaletą tych bibliotek klientów jest to, że mają obiekty tworzone na podstawie przeglądarek. Na przykład: JQuery zajmuje się "ActiveXObject (" Msxml2.XMLHTTP ")" lub "ActiveXObject (" Microsoft.XMLHTTP ")" na podstawie przeglądarki.

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

Tak, w aktualnym programie używam jQuery. Ale jeśli IE <= 9 nie obsługuje zdarzenia postępu, myślę, że żadna biblioteka nie może tu pomóc? Czy jest to rzeczywiście możliwe, aby uzyskać postęp (załadowane bajty) w IE w jakiś sposób? – user1154269

+0

Jeśli wywołasz funkcję $ .ajax/$. Get/$. Post dla operacji AJAX, funkcja ajaxStart(), którą wysłałem, działa jako zdarzenie postępu, aby wyświetlić pasek postępu. Sprawdziłem dla IE 6 i działa dobrze. – Sunny

+0

Jednak wyświetla tylko zawartość statyczną (obraz/html) jako pasek postępu. Jeśli musi być postęp w czasie rzeczywistym jak załadowane bajty, należy przeszukać inne możliwości. W niektórych artykułach, które czytam, jednym ze sposobów jest oszukać interfejs użytkownika, szybko pokazując 90% postępu, a następnie ukończyć pozostałe 10% po otrzymaniu odpowiedzi od serwera. – Sunny