Kevin: Variablen mit Ajax nachladen

Halli hallo..

ich hab jetzt schon ein wenig gegoogled, aber nix passendes gefunden. Vielleicht kann mir hier jemand fix einen Tipp geben.

Und zwar lade ich mit Ajax eine Datei nach, in der verschiedenartige
Arrays in JS definiert sind.
In der Hauptdatei will eine Funktion dann auf diese Variablen zugreifen.

Die Datei die nachgeladen wird, wird durch PHP erzeugt und enthält eine Liste anzuzeigender Elemente

In etwa so..

<SCRIPT type="text/javascript">
var tabList_xxx = new Array ('customer','general','material');
</SCRIPT>

Im Hauptprogramm habe ich dann eine JS Funktion die ungefähr so aussieht.

function activateTabulator(tabulatorName)
{
 eval('tabulatorList=tabList_' + tabulatorName);

....

wenn ich nun mit

tabulatorList[i] auf die Elemente des Arrays zugreifen will kommt undefined!
Das passiert allerdings nur, wenn ich die Variablen mit Ajax nachlade. Wenn ich das ganz normal in einer Datei mache funktioniert das prima.

Was muss ich zusätzlich tun, damit die Variablen beim nachladen erkannt werden? Ich hab gelesen bei Funktionen geht das über

self.xyz

Jemand ne Idee?

  1. Hallo,

    Und zwar lade ich mit Ajax eine Datei nach, in der verschiedenartige
    Arrays in JS definiert sind.

    Wenn du einfach nur eine XMLHttpRequest-Anfrage sendest und der Server dies hier zurückgibt:

    <SCRIPT type="text/javascript">
    var tabList_xxx = new Array ('customer','general','material');
    </SCRIPT>

    ... dann wird dieser Code noch längst nicht automatisch ausgeführt.

    Wenn du JavaScript nachladen willst, dann hänge am besten ein neues script-Element in den Head des gegenwärtigen HTML-Dokuments ein.

    Die dann vom Server ausgelieferte JavaScript-Datei sollte nur reinen JavaScript-Code, keinen HTML-Code wie <script>...</script> enthalten.

    Bei PHP solltest du auch den passenden Content-Type-Header senden, sonst sendet PHP text/html, was unsinnig für JavaScript-Code ist:
    header('Content-Type: application/x-javascript');

    Im Hauptprogramm habe ich dann eine JS Funktion die ungefähr so aussieht.

    function activateTabulator(tabulatorName)
    {
    eval('tabulatorList=tabList_' + tabulatorName);

    eval ist hier unnötig und langsam, besser:
    tabulatorList = window["tabList_" + tabulatorName];

    Aber Voraussetzung ist natürlich, dass der nachgeladene Code auch ausgeführt wurde.

    Mathias

    1. In meinem nachgeladenen Code steht aber neben JS noch ne Menge andere Dinge in HTML. Muss ich das nun splitten?
      Oje oje.. das erscheint mir dann aber langsam arg kompliziert.

      Oder gibt es da noch ne andere Alternative?

      1. Hallo!

        In meinem nachgeladenen Code steht aber neben JS noch ne Menge andere Dinge in HTML. Muss ich das nun splitten?
        Oje oje.. das erscheint mir dann aber langsam arg kompliziert.

        Oder gibt es da noch ne andere Alternative?

        Du könntest zb das prototype Framework verwenden. Das nimmt einem einen Haufen Dinge ab. Ich kann mich glaub ich erinnern, dass man da einstellen kann ob JS Code ausgeführt werden soll oder nicht.

        mfg
          frafu

      2. Hallo,

        In meinem nachgeladenen Code steht aber neben JS noch ne Menge andere Dinge in HTML. Muss ich das nun splitten?

        Wieso lädst du eine ganze HTML-Seite nach? Geht es dir um mehr als das JavaScript darin? Greifst du über das DOM auf die HTML-Inhalte zu? Wenn du nur das JavaScript brauchst, wieso lagerst du es nicht einfach in einer separaten JavaScript-Datei aus? (Es ist sowieso ratsam, JavaScript- und HTML-Code immer zu trennen...)
        Bevor ich weiter Tipps ins Blaue gebe: Was genau hast du vor? :)

        Mathias