Seite 1 von 1

PHP Variable in externer JavaScriptDatei nutzen

Verfasst: 16.08.2008, 19:05
von xoni
Hallo Forum,
ich teste gerade ein wenig und habe folgende Frage
Wenn ich folgenden Code ausführe, wird die PHP-Variable korrekt ausgegeben...

Code: Alles auswählen

<?php $test = "Hallo"; ?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http&#58;//www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http&#58;//www.w3.org/1999/xhtml" xml&#58;lang="en" lang="en">

<head>
</head>

<body>
<script type="text/javascript">
<!--
var test = '<?php echo "$test" ?>';
alert&#40;test&#41; ;
//-->
</script>

</body>
</html>
Wenn ich allerdings den JavaScriptCode extern einbinde, klappt das nicht mehr...

Code: Alles auswählen

<?php $test = "Hallo"; ?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http&#58;//www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http&#58;//www.w3.org/1999/xhtml" xml&#58;lang="en" lang="en">

<head>
<script language="JavaScript" type="text/javascript" src="test.js"></script>
</head>
<body onload="load&#40;&#41;">
</body>
</html>
hier der JavaScriptCode der Datei test.js ...

Code: Alles auswählen

function load&#40;&#41; &#123;
var test = '<?php echo "$test" ?>';
alert&#40;test&#41; ;
&#125;
Das Script gibt mir <?php echo "$test" ?> aus. Aber warum?

Vielen Dank für einen Denkanstoss....

Verfasst:
von

Verfasst: 16.08.2008, 19:08
von Burns
hallo,

das ist so weil PHP nur in einer datei mit Endung .php ausgeführt wird.
.js wird nicht vom PHP Parser überprüft.

du musst die Variable an das externe Java-Script übergeben, dann wirds auch ausgegeben.

Verfasst: 16.08.2008, 19:21
von xoni
Burns hat geschrieben: du musst die Variable an das externe Java-Script übergeben, dann wirds auch ausgegeben.
Danke für die Antwort...
Hhm, das wird schwierig, es sind gute 30 Variablen, wie kann ich die denn jetzt an die JavaScript Datei übergeben? Ich könnte natürlich auch den Code
wie im1. Beispiel einfügen, aber das möchte ich eigentlich nicht, der SeitenQuelltext wird dann unendlich lang... :-?
Die Lösung mit der externen JavaScriptdatei möchte ich eigentlich beibehalten...

Verfasst:
von

Verfasst: 16.08.2008, 19:25
von net(t)worker
dann musst du die externe js datei durch den php parser laufen lassen....

Verfasst: 16.08.2008, 19:32
von M4rco
ja und kannst die javascript Datei gleich komprimieren.

Verfasst: 16.08.2008, 19:32
von Burns
dazu musste nur die ganzen Variablen fürs Javascript angeben in der Haupt-Seite


<script type="text/javascript">
test='<?PHP echo "Hallo"; ?>';
</script>

dannach das externe javaScript aufrufen

<script language="JavaScript" type="text/javascript" src="test.js"></script>

und die variable musste bekannt sein
natütlich ohne PHP-Code in der externen datei, sondern nur JavaSript

Verfasst: 16.08.2008, 19:33
von xoni
net(t)worker hat geschrieben:dann musst du die externe js datei durch den php parser laufen lassen....
@net(t)worker

danke für den Tipp... dann werd ich mich mal auf die Suche machen, vielleicht gibt es ja im Netz 'nen gutes TUT...

so long...

@Burns

Sorry, Posting hat sich gerade überschnitten, Deine Lösung funktioniert gut.
Den Vorschlag von net(t)worker werde ich dennoch mal nachgehen.
Vielen Dank Euch Beiden und noch nen schönen SA Abend...

Verfasst: 17.08.2008, 09:42
von Mork vom Ork
net(t)worker hat geschrieben:dann musst du die externe js-datei durch den php-parser laufen lassen....
Wobei aber zu beachten wäre, dass die PHP-Variablen, die in der Hauptdatei existieren, weiterhin nicht in der Javascript-PHP-Datei existieren. Dieses:

Code: Alles auswählen

index.php&#58;
<?php $test = "Hallo"; ?>
blafasel
<script language="JavaScript" type="text/javascript" src="test.js.php"></script>

test.js.php&#58;
<?php header&#40;"Content-Type&#58; text/javascript"&#41;; ?>
function load&#40;&#41; &#123;
var test = '<?php echo "$test" ?>';
alert&#40;test&#41; ;
&#125;
… funktioniert nicht, weil $test zwar in index.php existiert, aber immer noch nicht in test.js.php, denn das sind zwei getrennt ablaufende PHP-Skripte.

Wenn überhaupt, müsste $test in test.js.php selbst erzeugt werden, also die ganze PHP-Verarbeitung aus der Hauptdatei in die Javascript-Datei wandern:

Code: Alles auswählen

index.php&#58;
<script language="JavaScript" type="text/javascript" src="test.js.php"></script>

test.js.php&#58;
<?php 
  header&#40;"Content-Type&#58; text/javascript"&#41;;
  $test = "Hallo";
?>
function load&#40;&#41; &#123;
var test = '<?php echo $test ?>';
alert&#40;test&#41; ;
&#125;
Soll Erzeugung und Ausgabe der Daten weiter getrennt bleiben, ist der von Burns gezeigte Weg der Naheliegendste. Als Alternative würde sich noch die Übergabe der PHP-Variablen als URL-Parameter anbieten:

Code: Alles auswählen

index.php&#58;
<?php $test = "Hallo"; ?>
blafasel
<script language="JavaScript" type="text/javascript" src="test.js.php?test=<?php echo urlencode&#40;$test&#41;; ?>"></script>

test.js.php&#58;
function load&#40;&#41; &#123;
var test = '<?php echo addslashes&#40;htmlspecialchars&#40;$_GET&#91;"test"&#93;&#41;&#41;; ?>';
alert&#40;test&#41; ;
&#125;
Macht aber hier nicht viel Sinn - wozu die Daten noch erst wieder zum Server schicken, wenn sie doch nur von Javascript im Browser benötigt werden.

Verfasst: 17.08.2008, 09:46
von Airport1
die einfachste loesung ist das externe js als

<script language="javascript" src="meinExternesJs.php"></script>

einzubinden. dann wirds durch den php parser gejagt bevor es als javascript zurueckkommt. ist also nicht sonderlich kompliziert..