繁体   English   中英

使用PHP向文档添加JavaScript

[英]Adding JavaScript to document with PHP

好的,这应该很容易吧? test.php:

function some_javascript() {
        echo "Hello";
        echo "<script type='text/javascript'>alert('Hello')<script>";
}

当您尝试加载test.php时,您将看到一个警报窗口。

我必须缺少一些东西,因为我无法使用模式窗口作为目标以及通过post进行AJAX请求来使其正常工作。

这是我要执行的操作的基本结构:

index.html:

<html>
<head>
<style>
 #modal {
    visibility:hidden;
 }
</style>
</head>
<body>
    <div id="modal">
    </div>
    <button onclick="call_ajax();">Call Ajax</button>
</body>
</html>

call_ajax()将模式可见性设置为“ visible”,并将其innerHTML设置为响应来自test.php的文本(我不编写代码,因为这里似乎没有问题;文本发送很好(我得到“ hello”))并根据需要处理发送的发布数据)。 但是没有警报窗口! 相反,我得到“ alert('Hello')”。

除此之外,代码工作正常,但我无法使javascript工作。 我一定缺少一些细节。 有任何想法吗????

您不能通过innerHTML添加<script>标记来运行它们。 看到这个问题: 脚本可以与innerHTML一起插入吗?

echo "<script type='text/javascript'>alert('Hello')<script>";

应该

echo "<script type='text/javascript'>alert('Hello')</script>";

同样,有人张贴在我下面,脚本无法以这种方式运行。

首先,脚本代码不能作为HTML插入,它会这样显示(确实如此)。

其次,即使您要在文档中插入SCRIPT元素,初始分析也已经完成,并且警报不会执行。

您可以做的是解析脚本代码并进行评估:

<!DOCTYPE html>
<html>
<head>
    <style>
        #modal {
            visibility:hidden;
        }
    </style>
    <script type="text/javascript">
        function call_ajax() {
            var ajaxData = "Hello\n<script type='text/javascript'>alert('Hello')<\/script>";
            var scriptStartPos = ajaxData.indexOf("<script type='text/javascript'>");
            if(scriptStartPos >= 0) {
                var scriptPos0=scriptStartPos+31;
                var scriptEndPos= ajaxData.indexOf("<\/script>", scriptPos0);
                if(scriptEndPos >= scriptPos0) {
                    eval(ajaxData.substring(scriptPos0,scriptEndPos));
                }
            }
        }
</script>
</head>
<body>
<div id="modal">
</div>
<button onclick="call_ajax();">Call Ajax</button>
</body>
</html>

请注意,在这种情况下,我使用了不转义的单引号。

基本上, Ajax Request不会加载Javascript代码。

我正在使用类似的东西来从ajax的responseText获取Javascript代码;

Javascript:

//pseudo function :
function call_ajax() {
  var ajaxResponse = "some data you have received with ajax"; 

  var div = document.createElement("div");
  div.innerHTML = ajaxResponse;
  var script = div.getElementsByTagName("script");
  for(var i=0; i < script.length; i++) {
    try{eval(script[i].innerHTML)}catch(ex){alert(ex)};
  }
};

这段代码将创建一个空白的div元素,其中的innerHTML将是用ajax加载的数据。 Javascript会将您的简单文本转换为html节点,然后您可以找到响应是否包含Javascript代码,方法是查找“ script”标签,然后尝试评估javascript代码以执行该代码,到此完成。

PS:在我看来,用ajax加载javascript不是一个好主意。 看一下,如果您对相同的javascript代码执行两个ajax请求:它将加载相同的代码两次,因此该代码可能因此成为错误的程序。

有很多Javascript库可以为您完成此操作。

尝试lazyload: https : //github.com/rgrove/lazyload

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM