par
Jean » 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
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);
}
Jusque là tout va bien : les sauvegardes sont lancées sous IE et Firefox C'est là que ça ne va plus
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 = '';
}
}
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