Bonjour,
Je rencontre actuellement un problème avec Internet Explorer (8, 9, ...) concernant l'utilisation d'AJAX avec XMLHttpRequest.
Je voudrais pouvoir récupérer l'état d'avancement de mon programme en utilisant AJAX.
Le truc c'est que ma méthode marche très bien sous Firefox, mais par contre sous IE, c'est la galère ^^
Quand je veux récupérer le contenu de req.responseText, j'obtiens l'erreur : Les données nécessaires pour terminer cette opération ne sont pas encore disponibles.
Cette erreur apparaît seulement quand req.readyState est égale à 3, IE me retourne bien le contenu de req.responseText quand req.readyState est égale à 4. Ce qui est très loin de m'arranger, puisque je voudrais pouvoir connaître l'état d'avancement du programme, pas seulement le résultat final ^^
Voici mon code JavaScript :
Et voici mon code PHP qui retourne l'état d'avancement de mon programme :
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 <html> <head> <script type="text/javascript" src="js/jquery-1.11.0.min.js"></script> </head> <body> <input type='button' value='AJAX' onclick='ajaxRequest("ajax.php")' /> </body> </html> <script type="text/javascript"> var req = false; function createRequest() { if(window.XMLHttpRequest) { req = new XMLHttpRequest(); } else if(window.ActiveXObject) { try { req = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { req = new ActiveXObject("Microsoft.XMLHTTP"); } } else { alert("Your brower doesn't support the AJAX requests"); req = false; } return req; } function ajaxRequest(url) { try { if (req) { req.abort(); req = false; } createRequest(); if (req) { req.onreadystatechange = processReqChange; req.open("GET", url, true); req.send(""); } else { alert('unable to create request'); } } catch (e) { alert(e.message); } } function processReqChange() { if (req.readyState == 3) { alert(req.responseText); } else if (req.readyState == 4 && req.status == 200) { alert(req.responseText); } } </script>
Code php : 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 <?php function send_message($message, $progress) { $d = array('message' => $message , 'progress' => $progress); echo json_encode($d) . PHP_EOL; ob_flush(); flush(); } // Long running task for($i = 0; $i < 5; $i++) { sleep(1); $percentage = ($i + 1) * 10; send_message($percentage . '% complete. server time: ' . date("h:i:s", time()) , $percentage); } sleep(1); send_message("COMPLETE", 'COMPLETE'); ?>
Si vous avez une idée =)
Merci d'avance.
Partager