按下按钮以运行与javascript脚本相呼应的php脚本

问题描述

|| 这是单击按钮时运行的javascript的结尾
xmlObj.open (\'GET\',/ajax.PHP,true);
xmlObj.send (\'\');
}
因此,这将在根目录中执行PHP脚本ajax.PHP
<?PHP
echo \"<script type=\'text/javascript\'>\\n\";
echo \"var e = document.getElementById(\'widget_more_\');\\n\";
echo \"e.innerHTML += \'<p> <a>TEST</a> </p>\';\\n\";
echo \"</script>\";
?>
这是一个JavaScript代码,用于按ID在html文档中搜索该元素,并将TEST链接附加到该元素。我已经在html中正常运行了此javascript,而未尝试通过PHP对其进行回显,并且它起作用了!但是当我尝试通过PHP做到这一点时,却不是!我究竟做错了什么? 我这样做的原因是因为TEST实际上将是来自PHP变量的字符串。 请给我提意见。 谢谢。     

解决方法

更好的是: ajax.php
<?php
$string = \'TEST\';
echo $string;
?>
的JavaScript
window.onload = function() {
    var e = document.getElementById(\'widget_more_\');
    xmlhttp = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject(\'Microsoft.XMLHTTP\');
    xmlhttp.open(\'GET\',\'/ajax.php\',true);
    xmlhttp.onreadystatechange = function() {
        if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
            e.innerHTML += \'<p><a>\' + xmlhttp.responseText + \'</a></p>\';
        }
    }
    xmlhttp.send(null);
}
我不太了解为什么不能使用PHP变量。     ,在php内编写javascript没有太多好处,通常这只会导致不必要的代码耦合。但是,为了将来的注意,可以通过两种方式从PHP或任何其他服务器端语言定义javascript。 首先是简单地从php中剥离脚本标签并从javascript调用eval: ajax.php
<?php
echo \"var e = document.getElementById(\'widget_more_\');\\n\";
echo \"e.innerHTML += \'<p> <a>TEST</a> </p>\';\\n\";
?>
Java脚本
xmlhttp.onreadystatechange = function() {
    if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
        //For function scope
        eval(xmlhttp.responseText);
        //For global scope
        window.eval(xmlhttp.responseText);
    }
}
另一种“稍微”更灵活的解决方案: ajax.php
<?php
echo \"function showTest(){\";
echo \"    var e = document.getElementById(\'widget_more_\');\\n\";
echo \"    e.innerHTML += \'<p> <a>TEST</a> </p>\';\\n\";
echo \"}\";
?>
Java脚本
xmlhttp.onreadystatechange = function() {
    if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
        //Now we will dynamically create your script element in the header
        //Get the header element on the page
        var head= document.getElementsByTagName(\'head\')[0];
        //Create the new script tag
        var script= document.createElement(\'script\');
        script.type= \'text/javascript\';
        script.innerHTML = xmlhttp.responseText;
        //Append the new script to the header
        head.appendChild(script);
        showTest();
    }
}
这些示例更多是出于学术目的,而不是实用(尽管动态加载javascript有其用途,请参阅google ajax api)。这两个示例仍然使您的代码严重耦合。迈达斯的答案是完成所追求目标的更合适的方法。