Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Ajax, jQuery - CKEDITOR Fehler bei Instanzierung

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] Ajax, jQuery - CKEDITOR Fehler bei Instanzierung

    Hallo liebe Gemeinde

    ich stoße grade auf ein IMHO komisches problem - vielleicht liegts auch nur daran das es gerade so spät ist, ... folgendes:


    Ich lade content per $.ajax(); - diese funktion ist in einer weiteren funktion definiert, damit ich mir einiges an tipparbeit spare.. auszug:

    Code:
    function ajaxRequest(url, responseContainer, data, type){
        // show ajax loading indicator etc..
        $.ajax({
            type: 'post',
            url: url,
            data: data,
            cache:true,
            dataType: type,
            success: function(html){
                if(html){
                    if(responseContainer=='#bc-content'){                   
                        $(responseContainer).html('<ul id="column1" class="column ui-sortable">'+html+'</ul>');
                        // check if dom elements loaded
                        if($('#saveArticle').length){
                            $.getScript('/adata/js/action.write.js', function() {
                                if(typeof do_action_write == 'function'){
                                    alert('test1')
                                    do_action_write();
                                    alert('test2');
                                }
                            });  
                        }
                    }
                }
            }
            // disable ajax loading indicator ...
        });
    }
    Zum Problem:

    Die ajaxRequest-Funktion wird innerhalb $(document).ready(); aufgerufen sobald ich auf den entsprechenden menüpunkt klicke, die action.write.js wird nachgeladen, sobald der container #saveArticle auch geladen wurde,... soweit alles ok, alert test1 wird ausgegeben, meine funktion wird aufgerufen, alert test2 wird ausgegeben..

    alles prima beim ersten aufruf! ok, ich klicke also in einem menüpunkt herum, und lade weiteren content per ajax, klicke ich nun wieder auf den menüpunkt, der mir auch die action.write.js laden soll, wird NUR alert test1 ausgegeben..test2 nicht.. drücke ich f5, ist wieder alles in ordnung.. also wird meine funktion innerhalb der action.write.js nur beim ersten request der hauptseite ausgeführt..
    firebug zeigt mir auch keine fehlermeldung wie z.b. das do_action_write(); undefined seie.. das komische daran ist, die getscript funktion lädt laut firebug erfolgreich den code, jedoch wird die funktion nur einmal aufgerufen..

    liegt es vllt. daran, dass die action.write.js beim 2. aufruf doppelt geladen wird und die funktionen sich überschreiben? - aber das kann auch nicht sein, weil ich den code der js-datei vorher im <script>-Tag der zu ladenden html datei stehen hatte, jedoch ist mir die getScript-Variante sympatischer

    habe schon mehrere versuche gemacht, wie z.b. eine evalScript-Funktion, den code direkt per $.ajax & dataType: script laden usw.. hilft alles nichts, überall das selbe problem, dass meine funktion nur EINMAL ausgeführt wird, obwohl ich sie erst NACH dem ajaxRequest ausführen möchte... -.-

    hatte ebenfalls schon http://www.php.de/javascript-ajax-un...-werten-2.html gelesen, jedoch betrachte ich diese variante als schwachsinnig, denn async sollte schon true sein...

    danke schonmal

  • #2
    Welchen tieferen Sinn hat es denn, action.write.js ständig neu zu laden?
    [COLOR="#F5F5FF"]--[/COLOR]
    [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
    „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
    [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
    [COLOR="#F5F5FF"]
    --[/COLOR]

    Kommentar


    • #3
      keinen, das ist mir jedoch erst aufgefallen als ich den post geschrieben habe :P

      hab ich schon geändert, jedoch ist es nicht die ursache des problems wie ich merke..

      update:

      was mir ebenfalls auffällt ist, wenn ich folgenden versuch mache, dass das script ab der else-bedingung von typeof einfach beendet..

      Code:
      // check if dom elements loaded
                          if($('#saveArticle').length){
                              if(typeof do_action_write != 'function'){
                                  $.getScript('/adata/js/action.write.js', function() {
                                  
                                      alert('test1');
                                      do_action_write();
                                      alert('test2');
                                  
                                  });
                              }else{
                                  alert('test3');
                                  do_action_write();
                                  alert('test4');
                              }
                          }
      test3 wird jedoch ausgegeben, test4 nicht... seltsam, nicht eine fehlermeldung (laut firebug).. gibt es noch andere wege das script zu debuggen?


      update2:

      habe grad mal mit dem IE8 versucht, dieser gibt folgende fehlermeldung (beim 2. aufruf natürlich erst)

      Meldung: Annahme ausgelöst und nicht aufgefangen.
      Zeile: 23
      Zeichen: 1618
      Code: 0
      URI: /adata/ckeditor/ckeditor.js


      Es scheint am ckeditor zu liegen, ich probier alles mal ohne ihn zu initialisieren...

      update 3:


      tatsächlich.. die ursache liegt am ckeditor.. jetzt weiß ich wenigstens schonmal wo ich suchen soll.. andere bereits probleme damit gehabt?

      Kommentar


      • #4
        So Problem gelöst. Für die anderen:

        Es lag daran, dass die Instanz vom CKEDITOR wohl durch den anderen ajaxRequest verloren gegangen ist. Also rufe ich den editor nicht wie gewohnt über $('#field').ckeditor(); sondern über folgende funktion auf:

        Code:
        function loadEditor(id){
            var instance = CKEDITOR.instances[id];
            if(instance)
            {
                CKEDITOR.remove(instance);
            }
            CKEDITOR.replace(id);
        }

        Kommentar

        Lädt...
        X