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)

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>
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
			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");			
			}
En gros voila ce qui se passe:

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.