php array und javascript
Emanuel
- javascript
Hallo Leute!
Diesmal werd ich wohl nicht selber auf des rätsels Lösung kommen!
Ich will Dropdown Boxen dynamisch mit Inhalt befüllen.
Jenachdem welcher Wert in einer Dropdown Box ausgewählt wird sollen sich die anderen nach bestimmten Kriterien "neu befüllen", ohne dass sich die ganze Seite neu lädt.
Prinzipiell funktioniert das ganze schon mal, ich hole mir die Daten aus der DB, und "konvertiere" das php array mit foreach Schleifen im <script type="text/javascript"> ... </script> Bereich in ein JS Array mit dem ich dann weiterarbeiten kann.
Da das ganze Script schon recht umfangreich ist, möchte die Funktion(en) in eine exteren JS Datei umtopfen.
Frage(n):
-Da es sich um eine Datei handelt, die vom server nicht interpretiert wird, werde ich wohl schwer das ganze genauso schön wie oben mit php (foreach schleifen) lösen können oder?
-Wie krieg ich das am besten hin?
Ich hoffe, es ist klar was ich machen will!
Danke schon mal für Hilfestellungen!
MfG Emanuel
Hellihello Emanuel,
Da das ganze Script schon recht umfangreich ist, möchte die Funktion(en) in eine exteren JS Datei umtopfen.
Frage(n):
-Da es sich um eine Datei handelt, die vom server nicht interpretiert wird, werde ich wohl schwer das ganze genauso schön wie oben mit php (foreach schleifen) lösen können oder?
Mh, du kannst das js direkt in den Quelltext schreiben, oder in eine externe Datei. Text-Datei bleibt Text-Datei würde ich sagen.
-Wie krieg ich das am besten hin?
Nutze PHP und eine mein_js_mit_php_generiert.js zu erstellen und binde sie in deinem HTML-Dokument_auch_oder_nicht_mit_PHP_erstellt_ist_egalt.htm ein.
Ich hoffe, es ist klar was ich machen will!
hoffentlich (;-).
Dank und Gruß,
frankx
Hey frankx,
Mh, du kannst das js direkt in den Quelltext schreiben, oder in eine externe Datei. Text-Datei bleibt Text-Datei würde ich sagen.
Was ich meinte ist, dass php code in einer .js Datei nicht interpretiert wird sondern nur in einer .php Datei, oder etwa nicht?
Da ich aber php brauche, um das Array in JS nutzen zu können funktioniert das so leider nicht. Sonst könnte ich von der .js Datei aus auf die Funktion zugreifen, mit der ich mir die Daten aus der DB hole und das Array gleich weiteverwende.
Nutze PHP und eine mein_js_mit_php_generiert.js zu erstellen und binde sie in deinem HTML-Dokument_auch_oder_nicht_mit_PHP_erstellt_ist_egalt.htm ein.
Das klingt doch vernünftig, gibt es die Möglichkeit, dass ich mit php den Inhalt einer vorhandene .js Datei erweitere(neue Zeilen hinzufüge)?
MfG Emanuel
echo $begrüßung;
Was ich meinte ist, dass php code in einer .js Datei nicht interpretiert wird sondern nur in einer .php Datei, oder etwa nicht?
Du unterliegst dem Trugschluss, dass die Endung einer Datei im HTTP-Umfeld eine Bedeutung hätte. Hat sie aber nicht. Um den Typ einer Ressource dem Brower mitzuteilen gibt es den Content-Type-Header. Für Javascript kannst du text/javascript verwenden.
Damit der Webserver eine Datei durch PHP schickt, muss der Webserver entsprechend konfiguriert sein.
Das kann so sein, dass generell alles, was .php heißt, diesen Weg geht oder auch durch individuelle Konfiguration einzelne Dateien oder Dateigruppen. Du kannst aber deine generierte Javascript-Datei ruhig auf .php enden lassen. Gib einfach mittels header()-Funktion einen passenden ContentType-Header aus, und alles wird gut. Dieses Verfahren wird ja auch erfolgreich bei generierten Grafiken angewendet.
echo "$verabschiedung $name";
Hellihello dedlfix,
Du unterliegst dem Trugschluss, dass die Endung einer Datei im HTTP-Umfeld eine Bedeutung hätte. Hat sie aber nicht. Um den Typ einer Ressource dem Brower mitzuteilen gibt es den Content-Type-Header. Für Javascript kannst du text/javascript verwenden.
Ist denn das Setzen eine Headers notwendig? Ist eine .js datei nicht vom Contenttype genau wie eine html-Datei, oder macht das "text/javascript" "text/html" einen unterschied. Standardmäßig kommt bei PHP "text/html" raus? Zeigt mir mein Firefox den Header an, wenn ich ihn lieb bitte?
Dank und Gruß,
frankx
echo $begrüßung;
Ist denn das Setzen eine Headers notwendig? Ist eine .js datei nicht vom Contenttype genau wie eine html-Datei, oder macht das "text/javascript" "text/html" einen unterschied.
Nun, text/html wird der Browser bei direktem Aufruf nach HTML-Elementen durchsuchen. Mit text/javascript oder auch text/plain macht er das nicht (wenn man mal vom IE absieht, der an der Stelle einerseits versucht, Fehlkonfigurationen des Webservers durch Inhaltsanalyse auszugleichen, dabei aber auch absichtlich mit text/plain ausgelieferte HTML-Dokumente der HTML-Engine zuführt.)
Wenn der Browser einem <script src="..."> folgt (egal ob da noch ein type-Attribut dabei ist oder nicht) wird er vermutlich einen falsch mitgelieferten Content-Type ignorieren. Doch auf solche Fehlertoleranz würde ich mich nicht verlassen. Man muss das ja auch nicht herausfordern, wenn man weiß, wie es korrekt geht [*]. Nicht umsonst gibt es den Grundsatz: Sei streng, bei dem was du sendest, (aber tolerant, bei dem was du empfängst).
[*] oder es zumindest annimmt. Bei meiner Recherche ist mir auch noch ein application/x-javascript über den Weg gelaufen. Das hat mich etwas verunsichert, weswegen ich es einfach ignoriert habe.
echo "$verabschiedung $name";
Danke für die hilfe, funktioniert jetzt!
(Lösung siehe konv. mit Struppi)
MfG Emanuel
Hellihello
Was ich meinte ist, dass php code in einer .js Datei nicht interpretiert wird sondern nur in einer .php Datei, oder etwa nicht?
Naja, du kannst dem Server sagen, er soll Dateien mit der Endung *.js von PHP parsen lassen. Wenn Dein Provider das zB. über die .htacces und "add-type-application" erlaubt.
Nutze PHP und eine mein_js_mit_php_generiert.js zu erstellen und binde sie in deinem HTML-Dokument_auch_oder_nicht_mit_PHP_erstellt_ist_egalt.htm ein.
Das klingt doch vernünftig, gibt es die Möglichkeit, dass ich mit php den Inhalt einer vorhandene .js Datei erweitere(neue Zeilen hinzufüge)?
Nun, wenn dieser Vorgang einmalig ist, wäre es mit file_get_contetns() und file_put_contents() eigentlich kein Problem.
Theoretisch kannst Du die *.js aber auch jedesmal vor der Abfrage mit o.g. Mitteln erstellen.
Dank und Gruß,
frankx
Naja, du kannst dem Server sagen, er soll Dateien mit der Endung *.js von PHP parsen lassen. Wenn Dein Provider das zB. über die .htacces und "add-type-application" erlaubt.
Was ich gerade versucht habe, aber leider nicht funktioniert hat ist, dass ich eine javascript.php Datei erstelle, mir dort die Daten aus der db hole und einen javascript Bereich (in der javascript.php Datei) erstelle. Natürlich funktioniert das, die Frage ist, wie Verweise ich bei einem z.B. 'onChange' Ereignis in der Datei main.php auf die javascript Funktion in der Datei javascript.php?
Was ich gerade versucht habe, aber leider nicht funktioniert hat ist, dass ich eine javascript.php Datei erstelle, mir dort die Daten aus der db hole und einen javascript Bereich (in der javascript.php Datei) erstelle. Natürlich funktioniert das, die Frage ist, wie Verweise ich bei einem z.B. 'onChange' Ereignis in der Datei main.php auf die javascript Funktion in der Datei javascript.php?
Was heißt verweisen? Du meinst aufrufen?
Einfach in dem du sie aufrufst.
Struppi.
Was heißt verweisen? Du meinst aufrufen?
Einfach in dem du sie aufrufst.
Ja aufrufen, geht nicht. Da kommt die Fehlermeldung "funktionsname" ist nicht definiert (weil die funktion in einer anderen Datei steht)
in der index.php siehts so aus:
<body>
<script type="text/javascript" src="jscript/wz_tooltip.js"></script>
<script type="text/html" src="jscript/javascript.php"></script>
Ich denke mal, dass es etwas mit 'type="text/html"' zu tun hat, muss da auch 'type="text/javascript" stehn? habs versucht, dann kommt die meldung: "syntax error" uzw. in der javascript funktion:
function blabla(bla_id)
{
syntax error--> var Data_1 = new Array();
var Data_2 = new Array();
...
}
wenn ich 'var' lösche, kommt die Meldung:
Missing } in XML expression
function blabla(bla_id)
{
var Data_1 = new Array();<--
var Data_2 = new Array();
...
}
MfG Emanuel
Was heißt verweisen? Du meinst aufrufen?
Einfach in dem du sie aufrufst.Ja aufrufen, geht nicht. Da kommt die Fehlermeldung "funktionsname" ist nicht definiert (weil die funktion in einer anderen Datei steht)
Nein, nicht weil die Funktion in einer anderen Datei steht, sondern weil du vermutlich eine falsch eausgabe machst.
<script type="text/html" src="jscript/javascript.php"></script>
Das ist soweit ok, aber was gibt javascript.php konkret aus?
Dir ist klar, das du keinerlei HTML ausgeben darfst?
Ich denke mal, dass es etwas mit 'type="text/html"' zu tun hat, muss da auch 'type="text/javascript" stehn?
nicht auch, sondern nur.
Deine Funktionen sehen erst mal ok aus, mit welchen Broiwser testest du?
Struppi.
Deine Funktionen sehen erst mal ok aus, mit welchen Broiwser testest du?
Firefox und in der error console kommen immer diese Fehlermeldungen.
In der javascript.php steht das am Anfang drin:
<?
require_once('../classes/_bla.php');
$_bla = new _bla();?>
<script type="text/javascript">
function blabla(bla_id)
{
var Data_1 = new Array();
var Data_2 = new Array();
<?
$DB_data = $_bla->getDBData();
foreach....
?>
...
Dann werden neue options bei den dropdwon listen hinzugefügt / alte gelöscht die sich in der main.php Datei befinden.
Wenn ich mir den JS code ansehe (firefox web-developer plugin) passt das alles, Arrays werden richtig erzeugt. Das Problem ist nur der Funktionsaufruf von main.php -> javascript.php.
(z.B <select onchange="blabla(blub)">...<option value="3">...</option>...</select>)
In der javascript.php steht das am Anfang drin:
<?
require_once('../classes/_bla.php');
was macht das?
$_bla = new _bla();?>
<script type="text/javascript">
kein HTML!
Struppi.
was macht das?
http://de.php.net/require_once
kein HTML!
Danke, das wars.
also
1.) absolut kein HTML
2.) muss in der index.php das stehn:
<script type="text/javascript" src="jscript/javascript.php"></script>
Funktioniert, danke!
MfG Emanuel
echo $begrüßung;
Nun, wenn dieser Vorgang einmalig ist, wäre es mit file_get_contetns() und file_put_contents() eigentlich kein Problem.
Theoretisch kannst Du die *.js aber auch jedesmal vor der Abfrage mit o.g. Mitteln erstellen.
Das ist nicht unbedingt eine gute Idee, da dabei mehrere, auch quasi gleichzeigig stattfindende, Request diese Datei schreiben können, und sich dabei unter Umständen gegenseitig mit falschen Daten beliefern können, besonders dann, wenn diese Daten aufgrund unterschiedlicher Parameter unterschiedlich ausfallen können. Insofern ist es besser, den Request nach der Javascript-Ressource eindeutig zu gestalten (.../javascript_daten.php?parameter1=foo;parameter2=bar) statt irgendwie eine Datei im Dateisystem abzulegen, und zu hoffen, dass alles eindeutig und in der sich selbst vorgestellten Reihenfolge abläuft.
echo "$verabschiedung $name";