Suche Tagcloud Kommentare RSS
Ubuntu Intrepid, mein Sony Vaio und eine Ricoh-Webcam

Es ist schon ein bisschen her, aber vielleicht hilfts ja noch jemandem. Das Skype-Problem erledigte sich bei mir nachdem ich in der ...
- Sobo
25C3: Nicht so viel Liveblogging ...

"Dieser css-Petals Liveblog wird Ihnen präsentiert vom Bundesministerium des Inneren" - so etwa?
- Till
Sexy arbeiten: Sony Vaio TZ mit Ubuntu

Okay, dass Vista + Vaio TZ keine so gute Kombi sein sollen, war mir schon vorher klar, aber das finde ich schon enorm! Danke für den Hinweis....
- Andre H.
trends   termine   deutschland   beautify the web   berlin   ccc   reviews   24c3   congress   web-design   tutorials   2007   webstandards   zensur   2008   persönlich   css   vorträge   usability   hacking   23c3   spaß am gerät   politisch   25c3   Überwachung   bcc  

AJAX Anfragen-Ärger

FCKeditor WindowZusammengerechnet elf Tage habe ich damit zugebracht, eine AJAX-Artikelvorschau für mein CMS "BeautifyWeb" zu schreiben. Schuld tragen die Abwesenheit meines eigentlichen Arbeitsgeräts, das Mysterium deutscher Sonderzeichen in Kodierungen, die Problematik multipler simultaner XMLHttpRequests sowie im Endspurt eine unzureichende Dokumentation meines Lieblings-WYSIWYG-Editors "FCKeditor". Zumindest vor letzterem möchte ich Euch mit diesem Artikel bewahren.

Nachdem ich meine handgeschriebene AJAX-Datenübermittlung für die Vorschau-Funktion wegen der Problematik mehrerer simultaner XMLHttpRequest-Objects in die sprichwörtliche Tonne gehauen hatte, kam ich auf die Idee, die extrem sauber und elegant geschriebene ajaxAutoSave-Funktion, die ich bereits in meinem CMS im Einsatz hatte, für meine Zwecke zu benutzen.

Mit eigentlich einfachen API-Befehlen an eine Instanz des FCKeditor sollten extern gesammelte Werte in den Editor geschrieben und dann via eines externen Auslösens der ajaxAutoSave-Funktion an den Server übermittlet werden. Dann sollte der Editor in seinen vorherigen Zustand zurückgesetzt werden. User würden von dieser Manipulation nichts merken und ich konnte auf bestehende und bereits funktionierende Strukuren aufbauen - Es hätte eine Win-Win Situation sein sollen.

Leider machte mir die unzureichende Dokumentation der Javascript-API des FCKeditors einen Strich durch die Rechung: Mehrere Stunden versuchte ich, mit folgenden Code-Stücken zum Erfolg zu kommen:

FCKeditorAPI.GetInstance('INSTANZNAME').GetData(true);
Dieser Befehl holt die aktuellen Inhalte einer FCKeditor-Instanz ab.

FCKeditorAPI.GetInstance('INSTANZNAME').SetData(VARIABLENNAME);
Dieser Befehl sollte eigentlich die kombinierten Werte in die Instanz des Editor schreiben, damit diese übermittelt werden können.

FCKeditorAPI.GetInstance('INSTANZNAME').Commands.GetCommand('ajaxAutoSave').Execute();
Mit diesem Befehl kann z.B. die registrierte Funktion "ajaxAutoSave" extern ausgelöst werden. Dies gilt für alle registrierten Funktionen innerhalb des FCKeditors. Quasi jedes Plugin muss sich als Funktion registrieren. Dies macht den externen Zugriff auf FCKeditor-Funktionen extrem einfach.

Hier das Problem: Zwar hatte ich schnell gelernt, dass die so oft in Forenbeiträgen angesprochenen Befehle GetXHTML und SetHTML mittlerweile deprecated waren und durch obiges GetData bzw. SetData ersetzt wurden, aber nach einigem Debugging wurde klar, dass SetData die nötigen Daten so eintrug, dass deren Übertragung via AJAX einen Fehler in der XML-Response (XML response is null) auslöste.

Rettung kam nach langem Debugging und Scrooglen durch einen Bugreport für das Spellerchecker-Plugin in IE7. Hier wurde:

FCKeditorAPI.GetInstance('INSTANZNAME').InsertHtml(VARIABLENNAME);

InsertHTML anstatt SetData benutzt. InsertHTML tauchte nicht in der API-Dokumentation auf. Trotzdem versuchte ich in meiner Verzweifelung mein Glück und siehe da! Es funktionierte! Offenbar behandelt "InsertHTML" die einzusetzenden Werte derart, dass sie urlencoded übergeben werden können, ohne dass die XML-Response ausbleibt und das gesamte AJAX-Script stirbt.

Falls Ihr also einmal auf Probleme mit übermittelten Werten aus FCKeditor haben solltet und zum Einsetzen der Werte in die Editor-Instanz SetData benutzt, dann versucht einmal Euer Glück mit "InsertHTML"! Mir leistet es gute Dienste. Bedenkt aber: Sowohl "insertHTML" als auch "SetData" brauchen einige Zeit, um einzusetzende Werte zu verarbeiten. Ihr solltet daher am besten einen Event-Listener benutzen, der prüft, ob das Einfügen der Werte in die Editor-Instanz vollständig ist.

Geschrieben am 16.09.2008

Zurück

0 Kommentare



Kommentar-Formular

Name:

E-mail oder URL:
(Optional)