来自 ajax 的 javascript 没有得到正确的执行

标签 javascript php jquery html ajax

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

看起来像这样screenshot

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

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

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

我在网上读到所有的“<script></script>”都是独立工作的,但是你可以调用一个<script>function</script>来自另一个 <script></script> block

那么为什么它没有这样做呢?

这是PHP代码:

    echo '<script>wipe();</script>';

这是第一个 <script> block :

        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 = '';
        }

最佳答案

为了避免安全问题(如 cross-site scripting 攻击)HTML5 指定 <script>通过 innerHTML 插入的标签 should not execute .

执行脚本的一种方法是使用 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);
      }
    }

  }

关于来自 ajax 的 javascript 没有得到正确的执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39611635/

相关文章:

javascript - 如何在实例方法中更新 Mongoose 子文档?

javascript - rails 5 : Access to geolocation was blocked over insecure connection to http://localhost:3000

javascript - JavaScript 中的 takeWhile 实现 - 寻找更好的想法

php - "Unknown column in ' 字段列表 '"当准备语句的占位符在子查询中

javascript - 如果 DOM 元素获取 "removed",AngularJS Controller 就会被销毁?

jQuery Flex Select - 如何设置所选选项?

javascript - 复制粘贴防止JS代码没有禁用输入(搜索字段)元素?

php - Symfony 2 配置错误

javascript - JSON.parse(json_string_from_php) 产生奇怪的数组

javascript - 使用jquery进行ajax调用并更新表单提交上的元素