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

[FRAGE] PHP-Variable an JS weiterleiten

matze0103

New member
Hallo.

Wie im Betreff angegeben geht es um die Weitergabe einer PHP-Variable an JavaScript.

Datei: test3.php
PHP:
<?php
echo 'Start Datei test3.PHP';

$PHPvariable = 'TEST-Variable';

echo '<script type="text/javascript">';
echo 'var JSvariable = "' . $PHPvariable . '";';
echo '</script>';
?>

<script type="text/javascript">
alert('Variable PHP > JS: ' + JSvariable );
</script>

Das funktioniert auch.
Wenn ich nun allerdings die PHP-Datei über eine JS-Funktion aufrufe, die wiederum aus einer HTM-Datei aufgerufen wird passiert nichts.

Datei: test3.htm
HTML:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
</head>
<script src="test3.js"></script>
<body>
    Start test3.HTM
    <div id="test3"></div>
    <script>test3("test")</script>
</body>

</html>

Datei: test3.js
Code:
function test3(str) {
document.write("Start test3.JS");

if (window.XMLHttpRequest) {
    xmlhttp = new XMLHttpRequest();
    } else {
    xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    }
    xmlhttp.onreadystatechange = function() {
    if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
    document.getElementById("test3").innerHTML = xmlhttp.responseText;
    }
}
xmlhttp.open("GET","test3.php?q="+str,true);
xmlhttp.send();
}

Ein Vorschlag den gesamen Code in einer Datei zusammenzufassen bringt mich ausdrücklich nicht weiter.

Der Code ist Teil eines größeren Projektes, auf das allernötigste runtergekürzt und enthält nur "Testcode".

Ich will einfach nur verstehen, was ich falsch mache, dass der Aufruf über drei Ecken nicht funktioniert.

Besten Dank vorab.

Cheers
Matze
 
Wenn ich (als Grünschnabel) dich richtig verstehe, meinst du ihn hier:
PHP:
$q = $_GET["q"];
 
Zuletzt bearbeitet:
Das ist (in meinem Beispiel) nicht drin. Hab den Code ja "gekürzt" um nur die Problematik zu verdeutlichen.
"q" wird im Original-Code erfolgreich verarbeitet und hat mit der PHP nach JS Variable nichts zu tun.
 
@mikdoe: Der Wille war da. Besten Dank.

@tsseh: Ich denke nicht, dass es etwas mit dem innerHTML zu tun hat. Die JS-Datei sendet und erwartet in dieser "Test-Umgebung" keine relevanten Daten, sondern dient nur dem Aufruf der PHP-Datei.

Die Frage bleibt: Warum funktioniert die PHP-Datei bei direktem Aufruf und bei "indirektem" nicht.
 
Dein Grundproblem kommt daher, dass der Browser den Inhalt von <script>-Nodes, die mittels innerHTML in das DOM eingefügt werden, nicht ausführt. Aber das ist auch kein gutes Designschema. Warum sendest du deine Daten in der AJAX-Antwort nicht in einem geeingneten Datenformat (z.B. JSON)?

PHP:
<?php
$PHPvariable = 'TEST-Variable';
echo json_encode($PHPvariable);
?>

Code:
function test3(str) {
	var xmlhttp;
	if (window.XMLHttpRequest) {
		xmlhttp = new XMLHttpRequest();
	}
	else {
		xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
	}
	xmlhttp.onreadystatechange = function() {
		if (xmlhttp.readyState == 4 && xmlhttp.status == 200){
			var data = JSON.parse(xmlhttp.responseText);
			alert(data);
		}
	}
	xmlhttp.open("GET", "test3.php?q=" + str, true);
	xmlhttp.send();
}
PS: Du scheinst sehr stark mit globalen Variablen zu arbeiten. Das solltest du dir lieber abgewöhnen.

Zu document.write:
http://www.w3.org/html/wg/drafts/html/CR/webappapis.html#dynamic-markup-insertion schrieb:
This method has very idiosyncratic behavior. In some cases, this method can affect the state of the HTML parser while the parser is running, resulting in a DOM that does not correspond to the source of the document (e.g. if the string written is the string "<plaintext>" or "<!--"). In other cases, the call can clear the current page first, as if document.open( ) had been called. In yet more cases, the method is simply ignored, or throws an exception. To make matters worse, the exact behavior of this method can in some cases be dependent on network latency, which can lead to failures that are very hard to debug. For all these reasons, use of this method is strongly discouraged.
 
Hi kkapsner,

vielen Dank für deinen Input.
Ist zwar nicht so wie ich mir das erwartet hatte, aber so sollte es funktionieren (probiere ich heute aber nicht mehr aus).

Ich weiß, dass ich mit dem Programmierstil keinen Schönheitspreis gewinnen werde, aber ich beschäftige mich erst seit Kurzem mit JS ... und jQuery ... und PHP ... und MySQL ... und CSS ... und HTML ... alles Neuland ...

Danke nochmals.

Cheers
Matze
 
Dein Grundproblem kommt daher, dass der Browser den Inhalt von <script>-Nodes, die mittels innerHTML in das DOM eingefügt werden, nicht ausführt.
Ja, das hab ich nicht gesehen. Da lag das Problem. Meine Augen wollen PHP Code einfach nicht lesen, weil es auch vernünftige Scriptsprachen gibt. Ich kann da nichts dafür :)
 
Zurück
Oben