[AJAX] onReadyStateChange ne fonctionne pas sur Firefox
Posté : 04 déc. 2007, 18:09
Bonjour,
J'ai mis en place un processus de sauvegarde automatique AJAX pour un backoffice avec un éditeur FCKEDitor. Ce processus se passe en x temps :
1) lecture du contenu de l'éditeur
2) affichage d'une image animée pour la sauvegarde (dans un div id=loader)
3) envoi de la sauvegarde
4) affichage d'un texte indiquant la sauvegarde (dans un div id=saveHour)
soit donc
Jusque là tout va bien : les sauvegardes sont lancées sous IE et Firefox C'est là que ça ne va plus
Sous IE, pas de problème. L'image dans loader est masquée et l'heure de sauvegarde affichée. Sous Firefox, rien à faire : la fonction ResponseSave n'est jamais appelée (j'ai essayé en mettant une alerte juste avant le test de xhr.readyState. J'ai également essayé sans succès avec la syntaxe
Il n'y a pas de plantage puisque les sauvegardes continuent à se faire au rythme de 100 secondes. Mais il n'y a pas de mise à jour de l'affichage.
Qu'est-ce qui cloche ? Merci
J'ai mis en place un processus de sauvegarde automatique AJAX pour un backoffice avec un éditeur FCKEDitor. Ce processus se passe en x temps :
1) lecture du contenu de l'éditeur
2) affichage d'une image animée pour la sauvegarde (dans un div id=loader)
3) envoi de la sauvegarde
4) affichage d'un texte indiquant la sauvegarde (dans un div id=saveHour)
soit donc
Code : Tout sélectionner
var xhr = createXMLHttpRequestObject ();
//Fonction de sauvegarde automatique de l'instance de l'éditeur
function SaveTimer (firstTime) {
if (firstTime == false) {
//Lecture du contenu de l'éditeur (value ne suffit pas) et conversion pour envoi via une URL
var oFCK = FCKeditorAPI.GetInstance("TEXTE");
data = "ID=1023&TEXTE=" + encodeURIComponent (oFCK.GetXHTML());
//Affichage de l'horloge et masquage du texte de sauvegarde
document.getElementById('saveHour').style.visibility = 'hidden';
document.getElementById('saveHour').style.display = 'none';
document.getElementById('loader').style.visibility = 'visible';
document.getElementById('loader').style.display = '';
//Envoi de la sauvegarde en post
xhr.open("POST", "mod_ajaxpost.php", true);
xhr.onReadyStateChange = ResponseSave;
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xhr.send(data);
}
//Relance de la sauvegarde au bout de 100 secondes
setTimeout("SaveTimer(false)",100000);
}
//Fonction lancée à la fin de la création de l'éditeur et qui assure que FCKeditorAPI est créé
function FCKeditor_OnComplete( editorInstance ) {
document.getElementById('loader').style.visibility = 'hidden';
document.getElementById('loader').style.display = 'none';
SaveTimer(true);
}Code : Tout sélectionner
function ResponseSave() {
if (xhr.readyState == 4) {
//Masquage de l'horloge et affichage du texte de sauvegarde
document.getElementById('loader').style.visibility = 'hidden';
document.getElementById('loader').style.display = 'none';
var dt=new Date();
if (xhr.responseText == "ok") {
document.getElementById('saveHour').innerHTML = "<i>Sauvegardé à : "+dt+"</i>";
} else {
document.getElementById('saveHour').innerHTML = "<font color=red>Problème de sauvegarde à : "+dt+"</font>";
}
document.getElementById('saveHour').style.visibility = 'visible';
document.getElementById('saveHour').style.display = '';
}
}
Code : Tout sélectionner
xhr.onReadyStateChange = function () {
...
}
Qu'est-ce qui cloche ? Merci