Steve: Umfangreiches Javascript-Array dynamisch nachladen

Hallo Leute,
ich habe in einer Javascript Datei daten.js eine Reihe von Daten in Form eines multidimensionalen Arrays, die bei jedem HTML-Aufruf einer Seite start.html per script-tag regulär eingebunden werden.

nun wiegen diese daten über 150KB und nicht jeder besucher der seite benötigt die entsprechende funktionalität. Ich suche nun einen modernen Weg via Ajax oder was auch immer, dieses Array (es sind eigentlich 4 verschiedene) bei einer bestimmten Benutzeraktion dynamisch nachzuladen, damit nicht jeder Nutzer, der diese Aktion ausführt, die Daten mitlädt.

Wie könnte man an das Problem herangehen?
Via Ajax kenne ich nur die Möglichkeit via innerhtml tag inhalte dynamisch zu modifizieren. bei js-inhalten ist mir aber nicht klar, wie der browser angewiesen werden kann, diese inhalte nachträglich zu berücksichtigen.

danke für eure ideen.

euer steve

  1. n'abend,

    Via Ajax kenne ich nur die Möglichkeit via innerhtml tag inhalte dynamisch zu modifizieren. bei js-inhalten ist mir aber nicht klar, wie der browser angewiesen werden kann, diese inhalte nachträglich zu berücksichtigen.

    // Du könntest deine Daten holen  
    var deinGeladenerString = " /*....*/ ";  
      
    // Du könntest ein neues <script> Element kreieren  
    var scriptNode = document.createElement( 'script' );  
    scriptNode.type = 'text/javascript';  
      
    // Deinen geladenen code in eine TextNode packen und in das neue <script> hängen  
    var textNode = document.createTextNode( deinGeladenerString );  
    scriptNode.appendChild( textNode );  
      
    // Den <head> des Dokuments suchen und <script> dort einhängen  
    var head = document.getElementsByTagName('head')[0];  
    head.appendChild( scriptNode );
    

    Du willst mal kurz in Javascript Objekte: document und Javascript Objecte: node vorbei schauen, um die verwendeten Methoden näher kennen zu lernen.

    Ausserdem willst du beachten, dass du einen synchronen(!) HTTP-Request nutzen willst.

    weiterhin schönen abend...

    --
    Freundlich wie man war, hat man mir Großbuchstaben geschenkt.
    sh:( fo:# ch:# rl:| br:> n4:& ie:{ mo:} va:) de:] zu:} fl:( ss:? ls:[ js:|
    1. Hallo globe,

      dieses Problem beschäftigt mich auch. Könnte man nicht mit DOM-Methoden dem Script-Knoten ein src zuweisen? Wenn ich das richtig verfolgt habe, wird das Script dann aber asynchron nachgeladen. Gibt es da irdendeine "Standard-Methode" um zu Prüfen, wann das Nachladen abgeschlossen ist? Mir fällt da im Moment nur eine, entweder warten durch Überprüfung der Existenz einer Variablen oder Funktion in einer Schleife, oder am Ende des nachgeladenen Scriptes steht ein Funktionsaufruf, also so etwas wie "script.onload".

      Gruß, Jürgen

      1. n'abend,

        dieses Problem beschäftigt mich auch. Könnte man nicht mit DOM-Methoden dem Script-Knoten ein src zuweisen? Wenn ich das richtig verfolgt habe, wird das Script dann aber asynchron nachgeladen. Gibt es da irdendeine "Standard-Methode" um zu Prüfen, wann das Nachladen abgeschlossen ist? Mir fällt da im Moment nur eine, entweder warten durch Überprüfung der Existenz einer Variablen oder Funktion in einer Schleife, oder am Ende des nachgeladenen Scriptes steht ein Funktionsaufruf, also so etwas wie "script.onload".

        Wenn ich mich recht erinnere, wird eine dynamisch eingehängte <script> Node erst nach dem Ausführen eines Scripts geladen, wenn die <script> Node keinen Inhalt hat, sondern auf eine externe Datei zeigt. Das wäre dann wohl etwas kontraproduktiv.

        In meiner kleinen Bibliothek lade ich weitere Scripte auf die von mir beschriebene Art und Weise und fahre damit eigentlich recht gut.

        weiterhin schönen abend...

        --
        Freundlich wie man war, hat man mir Großbuchstaben geschenkt.
        sh:( fo:# ch:# rl:| br:> n4:& ie:{ mo:} va:) de:] zu:} fl:( ss:? ls:[ js:|
        1. Hallo globe,

          danke für deine Antwort.

          In meiner kleinen Bibliothek ...

          ich werde es mal probieren. Die Idee mit dem "synchronen(!) HTTP-Request" fehlte mir noch.

          Gruß, Jürgen