0

好的,所以这应该很容易吧?测试.php:

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

当您尝试加载您的 test.php 时,您会收到一个警报窗口。

我一定遗漏了一些东西,因为我无法使用模式窗口作为目标并通过 post 发送 AJAX 请求来使其工作。

这是我正在尝试做的基本结构:

索引.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() 将模态可见性设置为“可见”,并将其 innerHTML 设置为来自 test.php 的响应文本(我不编写代码,因为我在这里似乎没有问题;文本发送得很好(我得到“你好”)并根据需要处理发送的发布数据)。但是没有警报窗口!相反,我得到“警报('Hello')”。

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

4

5 回答 5

1

您不能通过<script>添加标签来运行标签innerHTML。看到这个问题:可以用 innerHTML 插入脚本吗?

于 2012-07-05T17:51:38.427 回答
0

有很多 Javascript 库可以为您做到这一点。

尝试延迟加载: https ://github.com/rgrove/lazyload

于 2012-07-22T17:48:59.863 回答
0

首先,脚本代码不能作为 HTML 插入,它会显示为 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>

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

于 2012-07-05T21:24:24.200 回答
0

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

我正在使用这样的东西来让Javascript代码从 ajax 工作responseText

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通过查找“脚本”标签来查找响应是否包含代码,然后尝试评估javascript代码以执行代码,现在您完成了。

PS:在我看来,用 ajax 加载 javascript 并不是一个好主意。看看如果你对相同的 javascript 代码执行两个 ajax 请求会怎样:它会加载相同的代码两次,因此代码可能会因此而变得错误。

于 2012-07-22T17:22:28.020 回答
0
echo "<script type='text/javascript'>alert('Hello')<script>";

应该

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

另外,正如我在下面发布的那样,脚本不能以这种方式运行。

于 2012-07-05T17:51:57.047 回答