[AJAX] IE rame lors parcours responseXml
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:
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;
} |
Code:
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);
} |
Exemple de réponse :
Code:
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> |
Tout ça fonctionne bien, sauf quand le fichier de réponse dépasse 500 lignes.
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