Bonjour,
J'ai un problème avec IE dans le parcours des élements de mon responseXml.
Il rame énormément, alors que sous FF, c'est presque fluide.
Mon code :
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 function createXhr() { var xhr = null; if(window.XMLHttpRequest) // !IE xhr = new XMLHttpRequest(); else if(window.ActiveXObject){ // IE try { xhr = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { xhr = new ActiveXObject("Microsoft.XMLHTTP"); } } else { alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest..."); } return xhr; }Exemple de réponse :
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 var xhr = createXhr(); if(xhr != null) { xhr.open("POST", "select.php", true); xhr.onreadystatechange = function() { if(xhr.readyState == 4 && xhr.status == 200) { var _id = xhr.responseXML.getElementsByTagName("id"); var _val = xhr.responseXML.getElementsByTagName("val"); var _sel = xhr.responseXML.getElementsByTagName("sel"); for(var i = 0; i < _id.length; i++) { var __id = _id.item(i).firstChild.data; var sel = false; if(_sel.item(i).firstChild.data == "true") sel = true; document.getElementById(id).options[document.getElementById(id).options.length] = new Option(_val.item(i).firstChild.data, __id, false, sel); } } }; xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); var params = "type=test"; xhr.send(params); }
Tout ça fonctionne bien, sauf quand le fichier de réponse dépasse 500 lignes.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 <?xml version="1.0" encoding="UTF-8"?> <liste> <id>1</id><val>France</val><sel>true</sel> <id>2</id><val>Espagne</val><sel>false</sel> <id>3</id><val>Belgique</val><sel>false</sel> [...] </liste>
Pour info, avec 7000 lignes, il faut presque 30 secondes pour faire la boucle FOR (CPU à fond, "Ne répond pas" lorsqu'on clique sur la fenêtre du navigateur). Ca fonctionne quand même, mais c'est trop lent.
J'ai placé un alert juste avant la boucle, et elle apparaît presque instantanément.
J'ai testé sans responseXML, avec simplement un responseText avec split, idem.
J'ai bien pensé, avec responseText, de faire document.getElementById("liste").innerHTML, mais le comportement de FF et IE (même avec outerHTML) est différent.
Merci pour vos suggestions.
TiX
Partager