2012-10-12 8 views
5

Ho provato tutto quello che potevo pensare per arrivare almeno alla funzione di avanzamento in IE9 ma non funziona. Tutti gli altri browser entrano nella funzione di avanzamento e scrivono testo di test senza problemi. Spero che qualcuno possa aiutarmi. Grazie!C'è un evento di avanzamento AJAX in IE e come utilizzarlo?

 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

Purtroppo non c'è il 'evento progress' nel XHR di <= IE9, ma rilevo con questa condizione:' typeof function'' this.ProgressEvent ==='. Dove 'questo', è' window', l'oggetto globale. – Hydro

risposta

2

L'evento onprogress fa parte del XMLHttpRequest Livello 2 spec ...

... che non è supportato da IE 9 e sotto. Tuttavia, IE 10 dovrebbe sostenerla ...

Per ulteriori informazioni su quali browser sostegno XHR Livello 2, date un'occhiata a caniuse.com ...

+0

Grazie. Non ho mai pensato che IE fosse obsoleto ... Sì, in Windows8 IE10 ha mostrato i progressi per me. – user1154269

+0

prego! si ... IE è piuttosto orribile. se stai facendo AJX interdominio, fai attenzione !!! – Hristo

2

IE9 e sotto non supportano onProgress, quindi, perché non è possibile farlo funzionare.

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

perché stai creando un nuovo oggetto di XMLHttpRequest? –

+2

Perché è una demo funzionante con le 2 linee. – epascarello

0

È possibile utilizzare l'evento onreadystatechange e visualizzare il tuo messaggio. Sto solo suggerendo come soluzione.

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

Grazie. Nel programma attuale, il tachimetro della larghezza di banda, ho bisogno di ruotare un ago di velocità basato su byte caricati/secondi passati, quindi ... – user1154269

0

Aggiunta all'elenco di suggerimenti, se JQuery viene utilizzato nel progetto. Può essere ottenuto con le seguenti funzioni e naturalmente, deve essere richiesta JQuery $ .ajax. Il vantaggio di queste librerie client è che gli oggetti sono istanziati in base ai browser. Ad esempio: JQuery si occupa di "ActiveXObject (" Msxml2.XMLHTTP ")" o "ActiveXObject (" Microsoft.XMLHTTP ")" basato sul browser.

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

Sì, nel programma effettivo uso jQuery. Ma se IE <= 9 non supporta l'evento progress, penso che nessuna libreria possa aiutare qui? O è effettivamente possibile ottenere progressi (byte caricati) in IE in qualche modo? – user1154269

+0

Se si chiama $ .ajax/$. Get/$. Post per operazioni AJAX, la funzione ajaxStart() che ho postato funziona come evento progress per visualizzare la barra di avanzamento. Ho controllato per IE 6 e funziona bene. – Sunny

+0

Tuttavia, visualizza solo il contenuto statico (immagine/html) come barra di avanzamento. Se ha bisogno di essere un progresso in tempo reale come i byte caricati, è necessario cercare altre alternative. In alcuni degli articoli che ho letto, un modo è ingannare l'interfaccia utente mostrando rapidamente il progresso del 90% e quindi completare il restante 10% dopo aver ricevuto la risposta dal server. – Sunny

Problemi correlati