2012-07-05 103 views
0

好的,所以这应该很容易吧? test.php的:使用PHP添加JavaScript到文档

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

,当你尝试加载test.php的,你会得到一个警告窗口。

我必须缺少一些东西,因为我无法使用模式窗口作为目标以及通过发布的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()设置模式能见度“看得见”,并从测试其innerHTML来响应文本.php(我不写代码,因为我在这里似乎没有问题;文本发送得很好(我收到“hello”),发送的发送数据根据需要进行处理)。但没有警报窗口!相反,我会收到“alert('Hello')”。

除此之外,代码工作正常,但我无法让JavaScript工作。 必须有一些我错过的细节。 任何想法????

回答

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

应该

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

也有人贴我下面,脚本不能以这种方式运行。

+0

是的,“/”我错过了在这里打字。它在原始文件中。 – user1504736 2012-07-05 18:03:04

0

首先,脚本代码不能作为HTML插入,它会显示为(和它)。第二,即使您要在文档中插入SCRIPT元素,初始解析也已完成,并且警报将不会执行。

你可以做的是解析脚本代码和eval它:

<!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> 

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

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请求:它会加载两次相同的代码,所以代码可能会因为这个而变成bug。

相关问题