使用PHP将文档添加到文档中

时间:2012-07-05 17:49:03

标签: php javascript html ajax

好的,这应该很容易吗? 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“)和发送的发布数据按需处理。但没有警报窗口!相反,我得到“警告('你好')”。

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

5 个答案:

答案 0 :(得分:1)

您无法通过<script>添加innerHTML代码来运行它们。请参阅此问题:Can scripts be inserted with innerHTML?

答案 1 :(得分:0)

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

应该是

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

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

答案 2 :(得分:0)

首先,脚本代码不能作为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>

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

答案 3 :(得分: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代码以执行代码,现在您'完了。

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

答案 4 :(得分:0)

有很多Javascript库可以帮到你。

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