[AJAX] [IE6] Post en Ajax
Bonjour a tous,
Je bute actuellement sur un soucis de javascript a cause de ce satané ie6.
Mon script ajax fonctionne sous: Firefox (et Netscape), IE7, Opera, Safari et consort, mais ie6 fais (une fois de plus?) son relou.
Les objets activeX sont pourtant bien activés en particulier xmlhttprequest qui nous interesse, ainsi que le javascript.
Voici ma fonction init qui me retourne mon objet.
Code:
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
|
function init() {
var xhr = null; // L'objet qui contiendra le XMLHttpRequest
if(window.XMLHttpRequest) { // Firefox et autres
xhr = new XMLHttpRequest();
} else if(window.ActiveXObject) { // Internet Explorer
try {
xhr = new ActiveXObject("Msxml2.XMLHTTP");
} catch (Msxml2E) {
try {
xhr = new ActiveXObject("Microsoft.XMLHTTP");
} catch (MicrosoftE) {
xhr = null;
}
}
}
if(xhr === null) { // XMLHttpRequest non supporté par le navigateur
alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
xhr = false;
}
return xhr;
} |
voici une des fonctions qui ne passent pas
Code:
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
|
function updateMinistereList() {
alert('init');
var xhr = init(); // Récupère le XMLHttpRequest
var i;
var keys;
var valeurs;
document.getElementById("loader").className="voir";
xhr.open("POST", "ajax/updateListeMinistere.php", true);
xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
sel = document.getElementById('type');
type = sel.options[sel.selectedIndex].value;
xhr.onreadystatechange = function() {
if(xhr.readyState == 4 && xhr.status == 200) {
document.getElementById("loader").className="cacher";
valeurs = document.getElementById('cabinet');
while(valeurs.length != 1) {
document.getElementById('cabinet').options[valeurs.length-1] = null;
}
keys = xhr.responseXML.getElementsByTagName("key");
valeurs = xhr.responseXML.getElementsByTagName("value");
if (valeurs.length != 0) {
//on fait juste une boucle sur chaque élément "value" trouvé
for (i = 0; i < valeurs.length; i++) {
// On ajoute un élément a la liste
document.getElementById('cabinet').options[i+1] = new Option(valeurs.item(i).firstChild.data, keys.item(i).firstChild.data, false, false);
}
} else {
//TODO
}
//updateFormatList(); // cette méthode me servira a actualiser une autre liste lorsque celle-ci fonctionnera
} else {
//TODO
}
}
// On envoie ses données
xhr.send("type="+type);
} |
Etant débutant en Ajax je me dit que y'a surement un truc que j'ai loupé...
La méthode updateministere est appélé sur un onchange, et sur ie6 il ne me fait même pas la première alerte. En fait même avant l'appel grace au onchange j'ai une erreur javascript (un ; qui manque quelques part, mais je ne le vois point xD). Avec firebug sous firefox je n'ai pourtant aucune erreur même lors du post en ajax.
Si j'enleve le onreadystatechange et le send ie6 ne me met plus d'erreur et parcours bien ma methode updatelisteministere (en entier), mai bon cela ne me donne pas grand chose. :/