TrafficJan82: Problem mit dynamischem Code auf AJAX-Seiten

Ich arbeite derzeit an meiner ersten AJAX-Seite, und hab ein sehr nerviges Problem:

Einige der Seiten, die per Ajax in ein div geladen werden, enthalten Effekte, die JavaScript benötigen. Da ich jquery verwende lässt sich der meiste JS-Code gut im voraus laden (beim ersten laden der Hauptdatei), und nur die nötigen "Aktivierungsaufrufe" werden mit der Seite geladen.

Zum Beispiel funktioniert das bei einem Slider-Effekt so:
Hauptseite:

<script src="/revisited/javascript/ui.core.js" type="text/javascript"></script>  
<script src="/revisited/javascript/ui.slider.js" type="text/javascript"></script>  
<script src="/revisited/javascript/slider_test.js" type="text/javascript"></script>  

Weiter unten in der Seite:

  
$.ajax({  
      url: loc,  
      type: 'GET',  
      success: function( neueDaten ) {  
        $('#ajaxcontent').html( neueDaten );  
      },  
      complete: function(){  
        $('#ajaxcontent').fadeIn(300);  
        $("#content-slider").slider({  
		animate: true,  
		handle: ".content-slider-handle",  
		change: handleSliderChange,  
		slide: handleSliderSlide  
	});  
      }  
    });  

Das funktioniert auch ca 90% der Zeit gut...aber die restlichen 10% lädt der Browser (Safari, FF, Opera...aber vor allem FF) den Javascript-Code nicht, der Slider bleibt tot! Das folgt auch keinerlei Muster, die Seite wirft keine Fehlermeldungen auf - kurz: keinerlei Anhaltspunkte.

Weiss jemand, was hier los ist?

Danke,
Jan

  1. Moin,

    Das funktioniert auch ca 90% der Zeit gut...aber die restlichen 10% lädt der Browser (Safari, FF, Opera...aber vor allem FF) den Javascript-Code nicht, der Slider bleibt tot! Das folgt auch keinerlei Muster, die Seite wirft keine Fehlermeldungen auf - kurz: keinerlei Anhaltspunkte.

    Kann es sein, dass Teile der Response nicht übertragen werden und nur ein Teil der Response im Browser ankommt? Prüf das mal.

    Hotte

    --
    Wenn der Kommentar nicht zum Code passt, kann auch der Code falsch sein.
    1. Moin,

      »» Das funktioniert auch ca 90% der Zeit gut...aber die restlichen 10% lädt der Browser (Safari, FF, Opera...aber vor allem FF) den Javascript-Code nicht, der Slider bleibt tot! Das folgt auch keinerlei Muster, die Seite wirft keine Fehlermeldungen auf - kurz: keinerlei Anhaltspunkte.

      Kann es sein, dass Teile der Response nicht übertragen werden und nur ein Teil der Response im Browser ankommt? Prüf das mal.

      Hotte

      Sieht ganz danach aus...aber wie kann ich denn das überprüfen? Ich bin in Sachen AJAX ein ziemlicher Neuling, kannst du mir da weiterhelfen?

      Danke,
      Jan

      1. moin,

        »» Kann es sein, dass Teile der Response nicht übertragen werden und nur ein Teil der Response im Browser ankommt? Prüf das mal.
        »»
        »» Hotte

        Sieht ganz danach aus...aber wie kann ich denn das überprüfen? Ich bin in Sachen AJAX ein ziemlicher Neuling, kannst du mir da weiterhelfen?

        Bei Ajax spielen einige Dinge zusammen, bei denen ist nicht immer leicht ist, dahinter zu kommen. Die größte Crux ist die Zeichenkodierung und das fängt damit an, was der Besucher im Browser einstellt.

        Stichwort URI und: escape and unescape URI strings as defined by RFC 2396 (and updated by RFC 2732)....

        Seitens Javascript (Request) gibt es die Funktionen
        escape(1)
        encodeURI(2)
        encodeURIComponent(3)

        Der Unterschied zwischen escape(1) und encodeURI(2) besteht darin, dass bei (1) die Kodierung in ASCII-Zahlenwerte, bei (2) hingegen in UTF-8 erfolgt: escape('ü') macht aus den 'ü' ein '%FC', encodeURI('ü') ein '%C3%BC'. Die Funktion encodeURIComponent() kodiert zusätzlich zu (2) noch eine Reihe weiterer Zeichen, u.a. das Zeichen "&" (Kaufmanns-UND, Ampersand), siehe SELFHTML-Doku.

        Mit diesen Funktionen musst Du Dich auseinandersetzen, sofern es darum geht, per Ajax Requests zu erzeugen mit Parametern die userseitig erfolgen, also Benutzereingaben oder allgemein: Parameter in denen Sonderzeichen zu erwarten sind.

        Um zu prüfen, was dann am Server ankommt, ist es u.U. hilfreich, den ganzen Kram mal in eine Datei zu schreiben, so mache ich das im Zweifelsfall und zum Testen einer neuen Ajax-Anwendung. Hierbei sehe ich, wie sich das "Escapen" [Funktionen (1), (2), (3)] und das browserseitige Character-Encoding auswirkt.

        Hilfreich kann es auch sein, eine Response, die serverseitig erzeugt wird, in eine Datei zu schreiben, bevor die per Ajax zurück zum Browser geschickt wird.

        Lange Rede kurzer Sinn: Bei Nichbeachten o.g. RFC's kann es schonmal vorkommen, dass von einem URI-String Teile abgeschnitten werden.

        Viel Erfolg,
        Hotte

        Basics zu URI in AJAX

        --
        Wenn der Kommentar nicht zum Code passt, kann auch der Code falsch sein.