Google weiß alles: js Funktion in XMLHttpRequest ausführen?

Beitrag lesen

Klar wird der JS-Teil der .php auf diese Weise nicht ausgeführt, da ja auch im Callback mittels

  div.innerHTML = hr.responseText;

nur ein String in einen anderen kopiert wird, also keine Evaluation stattfindet.

Eval ist zwar des Teufels, aber hier kann es eine Lösung sein:

Sender:

<?php
$data['innerHtml']='Das ist <b>fett</b>!';
$data['script']='alert("Ist das nicht fett?");';
echo json_encode($data);
?>

Webseite:

<!doctype html>
<html>
<body>
<h1>Test</h1>
<div id="foo">Das ist dünn.</div>
<script>
function worker() {
    var data;
    var objekt=document.getElementById('foo');
    var xmlHttp = new XMLHttpRequest();
    if (xmlHttp) {
        xmlHttp.open('GET', 'test_0001.php', true);
        xmlHttp.onreadystatechange = function () {
            if (xmlHttp.readyState == 4) {
                data=JSON.parse(xmlHttp.responseText);
                objekt.innerHTML=data['innerHtml'];
                eval(data['script']);
            }
        };
        xmlHttp.send(null);
    }
}
worker();
</script>
</body>
</html>