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