• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

[FRAGE] .js-Datei einbinden, wobei der Name der JS-Datei variabel ist

flixi

New member
Hallo zusammen,

ich stehe vor einem Problem, bei dem ich trotz 3-tägiger Suche, keine passende Lösung für mich finden kann.

Kurzer Abriss der Situation:
1. Ich habe eine HTML-Datei, in der ein .js-Datei geladen wird:
HTML:
<script src="http://www.x.net/Dienstplan/dienstplaene/dienstplan.js"></script>

2. Diese .js-Datei beinhaltet ein Array (vereinfacht dargestellt):
Code:
var Datum = new Array();
Datum[5042014] = 'Heute ist der 05.04.2014 - Dienst von 13:00 bis 22:00 Uhr!';
Datum[7042014] = 'Heute ist der 07.04.2014 - Ich habe heute frei';
Datum[8042014] = 'Heute ist der 08.04.2014 - Schulung von 11:00 bis 16:30 Uhr!';

3. Ich ermittel in der HTML-Datei das heutige Datum und gebe dann den entsprechenden Datensatz aus:
HTML:
var today = new Date();
var dd = today.getDate();
var mm = today.getMonth()+1; //January is 0!
var yyyy = today.getFullYear();
     if(dd<10){
          dd='0'+dd
     }
     if(mm<10){
          mm='0'+mm
     }
var today = parseInt(dd+mm+yyyy);
document.writeln(Datum[today]);

Das funktioniert soweit.
Jetzt habe ich allerdings das "Problem", dass es nicht nur diese eine js-Datei gibt, sondern für jeden im Team eine eigene.
Jetzt lade ich die dienstplan.js. Ich möchte jedoch jetzt entscheiden, ob ich diese dienstplan.js aufrufe, oder aber die dienstplan-manuela.js, oder dienstplan-andreas.js

Ich stelle mir ein Dropdown-Menü mit allen Namen vor. Dort wähle ich einen aus und drücke auf den Button "Anzeigen".
Mir ist klar, wie ich ein solches Menü hinbekomme.. Aber:

Wie sage ich dem Script-Aufruf (siehe 1.), dass er nun eine andere Datei laden soll?

Hinweis: Ich darf nur mit HTML, JA und CSS arbeiten!

Vielen Dank für Eure Ideen!
 

Hallo mikdoe,

vielen Dank für deine schnelle Antwort!

Ich glaube, das ist es.. Da ich aber ein JS-Noob bin, habe ich meine Schwierigkeiten mit der Umsetzung.
Zum testen habe ich den Code entsprechend geändert, in dem ich meine JS-Datei mit dem Array als Inhalt angegeben habe:

HTML:
                <script type="text/javascript">  
function loadScript(scriptname) {  
  var snode = document.createElement('script');  
  snode.setAttribute('type','text/javascript');  
  snode.setAttribute('src',scriptname); 
  document.getElementsByTagName('head')[0].appendChild(snode); 
}  
loadScript('http://www.x.net/NetDienstplan/dienstplaene/dienstplan.js');  
</script>

Nun erhalte ich in der JS Console meines Browsers die Meldung:
Uncaught ReferenceError: Datum is not defined index.html:54
(anonymous function)

Zeile 54 lautet: document.writeln(Datum[today]);

Damit bin ich leider schon überfordert :(
 
Hallo noch mal,

ich bin einen Schritt weiter. Es hat wohl nicht funktioniert, weil die js-Datei noch nicht geladen war, als ich versucht habe, das Array auszugeben.

Zum testen habe ich nun den Aufruf mit einem setTimeout versehen:
Code:
setTimeout(function(){document.writeln(Datum[today])},5000);

Jetzt läd er die Daten korrekt, zeigt sie aber unformatiert als neue Seite an.
Soll heißen, es wird nur der Inhalt des "Datum[today]" ausgegeben. CSS-Dateien und der Rest des HTML-Codes wird ignoeriert.

Hat jemand eine Idee, wie ich das fixen kann?

LG
Felix
 
Da die variables JS-Dateien ja anscheinend nur Daten enthalten, warum überhaupt als script einbinden? einfach per AJAX holen und an die verarbeitende Funktion weiterreichen.
 
Dormilich, es sind ja Variablenzuweisungen, also JS Code. Keine Datenstruktur. Geht das dann auch?
 
Klar, AJAX drückt dir die Daten ja auch in eine Variable (die zwar i.d.R. nicht global ist …). Abgesehen davon wollte ich noch anmerken, daß diese Daten für ein Array eher ungeeignet sind (viele Löcher, was in einer for()/while()-Schleife nicht so toll ist), ein einfaches Objekt wäre da wohl sauberer.
 
So wie die Datei aufgebaut ist, wird das mit AJAX und JSON.parse() nicht funktionieren, aber man sollte sowieso den Array-Construktor nicht verwenden sondern Arrayliterale (oder in diesem Fall besser Objectliterale):
Code:
{
	"5042014": "Heute ist der 05.04.2014 - Dienst von 13:00 bis 22:00 Uhr!",
	"7042014": "Heute ist der 07.04.2014 - Ich habe heute frei",
	"8042014": "Heute ist der 08.04.2014 - Schulung von 11:00 bis 16:30 Uhr!"
}

PS: das parseInt im Code oben ist komplett überflüssig, da sowohl Array- als auch Object-Keys immer Strings sind.
PPS: prinzipiell sind globale Variablen nie eine besonders gute Idee.
 
Zurück
Oben