Bonjour,
Je travaille sous IE et j'utilise ajax pour récupérer un document xml généré sur un serveur Tomcat.
Mon problème est que suivant la taille du document que je génère, le parsing de la réponse échoue. En gros, le xhr.responseText contient bien mon document complet mais à un caractère près, le xhr.responseXml est vide.
Le code suivant fonctionne parfaitement sous FF mais le problème arrive sous IE uniquement (v6 et 7)
et le code de la servlet qui génère le xml:
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
79
80
81
82
83 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Insert title here</title> <script> function getXMLHTTP(){ var xhr=null; if(window.XMLHttpRequest) // Firefox et autres xhr = new XMLHttpRequest(); else if(window.ActiveXObject){ // Internet Explorer try { xhr = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { try { xhr = new ActiveXObject("Microsoft.XMLHTTP"); } catch (e1) { xhr = null; } } } else { // XMLHttpRequest non supporté par le navigateur alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest..."); } return xhr; } function f(int, padding){ var xhr = getXMLHTTP(); document.getElementById("error").innerHTML = ""; document.getElementById("error2").innerHTML = ""; if (xhr){ var returnFunction = function(xhr) { try{ var xml = xhr.responseXML; document.getElementById("aa").value = xhr.responseText; var liste = xml.getElementsByTagName("loop")[0].childNodes; var value = liste[liste.length-2].firstChild.nodeValue; var rootName = xml.getElementsByTagName("loop")[0].nodeName; document.getElementById("error2").innerHTML = "root: " +rootName+ " ("+xhr.responseText.length+") chars"; } catch(e){ document.getElementById("error2").innerHTML = "xml: " +xml + "("+xhr.responseText.length+")"; document.getElementById("error").innerHTML = e.description?e.description :e.message; } } xhr.open('GET', 'DataSource?action=ahah&value='+int+'&padding='+padding, true); xhr.onreadystatechange = function(){ if (xhr.readyState == 4) { returnFunction(xhr); } } xhr.send(null); } } </script> </head> <body> max: <input type="text" id="in" ></input> padding: <input type="text" id="padding" ></input> <button onclick="f(document.getElementById('in').value,document.getElementById('padding').value)">Go</button><br/><br/> <label style="color:red" id="error"></label><br> <label id="error2"></label><br> <textarea id="aa" cols="50" rows="40"></textarea><br> </body> </html>
En gros voila ce qui se passe:
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 else if (action.equals("ahah")){ StringBuilder builder = new StringBuilder("<?xml version='1.0' encoding='UTF-8'?>\n<loop>\n"); int max = Integer.valueOf(request.getParameter("value")).intValue(); String padding = request.getParameter("padding"); for (int i=max; i>0; i--){ if (i==max) builder.append("\t<iter>" + i +padding + "</iter>\n"); else builder.append("\t<iter>" + i + "</iter>\n"); } builder.append("</loop>"); System.out.println(builder); response.getWriter().println(builder); response.setContentType("text/xml;charset=iso-UTF-8"); }
Premier coup, tout va bien
Je rajoute un caractère, rien ne va plus ^^
Si quelqu'un a une idée de comment corriger le problème, je suis preneur.
Partager