Je travaille sur une application HTML JScript/VBScript (afin que nous puissions exécuter à des privilèges plus élevés qu'une page Web normale) et nous fournissons la possibilité de télécharger un fichier et nous devons fournir des commentaires sur la progression du téléchargement à nos utilisateurs. Naturellement, j'ai figuré une barre de progression ou un texte de progression basé sur la taille totale du fichier et le montant du fichier déjà téléchargé. J'essaie d'obtenir la taille de la partie déjà téléchargée dans Internet Explorer. Jusqu'à présent, j'ai essayé tout ce que je peux penser pour accéder à quelle quantité du fichier est déjà téléchargé. Lorsque j'essaie d'accéder à responseText ou responseBody pendant readyState 3 (interactif), j'obtiens simplement l'exception:JScript/VBScript: Suivi du téléchargement du fichier via XMLHttpRequest
Les données nécessaires pour effectuer cette opération ne sont pas encore disponibles.
Il semble donc que Microsoft ne mentait pas quand ils ont établi que responseText ou responseBody ne seront pas disponibles jusqu'à ce que le XMLHttpRequest est terminée (allé à 4 readyState)
Je peux obtenir la taille totale du fichier et enregistrez le fichier sur disque, donc j'ai omis les parties du code que j'ai déjà. Voici ce que j'ai essayé. Je suis ouvert à toute autre suggestion - même en changeant les implémentations de XMLHttpRequest. Notez que je n'ai pas de contrôle sur le côté serveur des choses ... seulement mon application client, donc les solutions PHP/ASP ne fonctionneront pas. Merci à l'avance ...
function getRemoteFile(urlToFile){
if (urlToFile) {
try {
var xmlReq = new XMLHttpRequest();
//Tried all of the following with no luck
//var xmlReq = new ActiveXObject('Microsoft.XMLHTTP');
//var xmlReq = new ActiveXObject('Msxml2.DOMDocument.3.0');
//var xmlReq = new ActiveXObject("Msxml2.XMLHTTP.3.0");
//var xmlReq = new ActiveXObject("Msxml2.XMLHTTP.6.0");
//var xmlReq =new ActiveXObject("Msxml2.DOMDocument.6.0");
function updateDownloadProgress() {
if (xmlReq.readyState == 3) {
try {
alert(xmlReq.responseText.length);
}
catch (e) {
alert(e.message);
}
window.setTimeout(updateDownloadProgress, 200);
}
}
xmlReq.open("GET", urlToFile, true);
xmlReq.onreadystatechange = function(){
if (xmlReq.readyState == 3) {
updateDownloadProgress();
}
if (xmlReq.readyState == 4) {
alert("done");
}
}
xmlReq.send(null);
} catch(e) {
alert(e.message);
return null;
}
}
}
Si jamais Microsoft vous a donné cette fonctionnalité, cela fonctionnerait comme ceci http://xkcd.com/612/ :) –