Bonjour à tous !
En cette belle journée je me décide à poster un problème que j'ai depuis une semaine.
J'ai un formulaire d'envoi de fichiers, j'ai voulu mettre en place une barre de progression en utilisant le module APC de apache.
Tout se passe bien sur Firefox (comme d'habitude) mais sous IE c'ets une autre histoire, j'ai même essuyé des plantages du navigateur avec ce code...
Voici le code :
Alors le souci sur IE c'est que la barre de progression récupère les infos une seule fois puis ne se met pas à jour, en traçant un peu le fonctionnement je me suis aperçue que c'était le "xhr.responseText" qui ne changeait pas. J'ai donc fais un test, j'envoie un fichier de 1.5Mo, en même temps j'ouvre une seconde fenêtre avec le fichier progress.php ouvert en lui passant en paramètre le id_progress, les données sont bien mise à jour normalement sur cette page mais mon code javascript lui récupère toujours la même info...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78 function suivi_upload() { setTimeout(testProgress,500); } function testProgress() { var idProgress=document.getElementById("progress_key").value; var xhr = getXhr(); if(xhr) { xhr.onreadystatechange = function() { if (xhr.readyState == 4) { if (xhr.status == 200) { document.getElementById("log").innerHTML=xhr.responseText+"<br/>"; //tcb(xhr.responseText); setTimeout(testProgress,50); } } } xhr.open("GET","progress.php?progress_key="+idProgress,true); xhr.send(null); } } function getXhr() { var http_request = false; if (window.XMLHttpRequest) { http_request = new XMLHttpRequest(); if (http_request.overrideMimeType) { http_request.overrideMimeType('text/html; charset=utf-8'); } } else if (window.ActiveXObject) { var ieversions = ['Msxml2.XMLHTTP', 'Microsoft.XMLHTTP', 'Msxml2.XMLHTTP.5.0', 'Msxml2.XMLHTTP.4.0', 'Msxml2.XMLHTTP.3.0']; for(var i=0; !http_request && i<ieversions.length; i++) { try { http_request = new ActiveXObject(ieversions[i]); } catch(e) { http_request = null; } } } if (!http_request) { alert('Abandon :( Impossible de créer une instance XMLHTTP'); return false; } else { return http_request; } } function tcb(text) { var repXhr=text; var objRep=eval("("+repXhr+")"); document.getElementById("enCours").innerHTML=objRep.current; document.getElementById("total").innerHTML=objRep.total; document.getElementById("tab").innerHTML=repXhr; if (objRep.done==0) setTimeout(testProgress,50); }
J'ai donc eu le choix, soit poster ici après m'être arraché tous les cheveux un par un ou bien détruire IE de la surface de la planète. Bien que la seconde option est nettement plus intéressante, je me suis dis que ça risquais d'être un peu long...
Pour infos voici le fichier progress.php :
Merci à tous pour votre aide !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 <? if($_SERVER['REQUEST_METHOD']=='POST') { $status = apc_fetch('upload_'.$_POST['APC_UPLOAD_PROGRESS']); $status['done']=1; echo json_encode($status); exit; } else if(isset($_GET['progress_key'])) { $status = apc_fetch('upload_'.$_GET['progress_key']); echo json_encode($status); exit; } ?>
Partager