来自ajax的javascript无法正常执行

Rac*_*ver 5 html javascript php ajax jquery

使用Ajax,我创建了一种控制台,允许我动态执行一些PHP函数.

看起来像这样 截图

问题是在一堆命令之后,控制台变得难以阅读.所以我创建了一个名为"wipe();"的javascript函数,它清除了<div>包含控制台的内容.

我用chrome的开发工具(javascript控制台)测试了这个功能,它运行得很好.

但是当我尝试通过使PHP-AJAX返回"<script> wipe(); </ script>"来调用此函数时,它不起作用.它什么都不做.

我在互联网上看到所有"<script> </ script>"彼此独立工作,但你可以<script>function</script>从另一个<script> </ script>块调用.

那为什么不这样做呢?

这是PHP代码:

    echo '<script>wipe();</script>';
Run Code Online (Sandbox Code Playgroud)

这是第一个<script>块:

        var xmlhttp = new XMLHttpRequest();
        var span = document.getElementById("screen");

     function send(data) {
        window.setInterval(function() {
        var elem = document.getElementById('screen');
           xmlhttp = new XMLHttpRequest();
           xmlhttp.open("GET", "./_rcons-transmetter.php?data="+data, true)
           xmlhttp.onloadend = function() {
             span.innerHTML = span.innerHTML+escapeHtml(data)+'<br>'+xmlhttp.responseText+'<br><br>';
           }
           xmlhttp.send();
         }

    function wipe(){
             span.innerHTML = '';
        }
Run Code Online (Sandbox Code Playgroud)

Vla*_*nut 2

为了避免安全问题(如跨站点脚本攻击),HTML5 指定不应执行<script>通过innerHTML 插入的标签。

执行脚本的一种方法是使用eval()评估 html 。请注意:使用 eval 可能很危险。

var xmlhttp = new XMLHttpRequest();
var span = document.getElementById("screen");

function send(data) {
  window.setInterval(function() {
      var elem = document.getElementById('screen');
      xmlhttp = new XMLHttpRequest();
      xmlhttp.open("GET", "./_rcons-transmetter.php?data=" + data, true)
      xmlhttp.onloadend = function() {
        span.innerHTML = span.innerHTML + escapeHtml(data) + '<br>' + xmlhttp.responseText + '<br><br>';
        evalJSFromHtml(span.innerHTML);
      }
      xmlhttp.send();
    }

    function wipe() {
      span.innerHTML = '';
    }

    function evalJSFromHtml(html) {
      var newElement = document.createElement('div');
      newElement.innerHTML = html;

      var scripts = newElement.getElementsByTagName("script");
      for (var i = 0; i < scripts.length; ++i) {
        var script = scripts[i];
        eval(script.innerHTML);
      }
    }

  }
Run Code Online (Sandbox Code Playgroud)