从PHP响应中将Javascript代码插入HTML

时间:2014-01-25 15:03:58

标签: javascript php html ajax

您好我正在尝试使用名为exJS()的函数中的以下AJAX-PHP代码在我的HTML文档中插入JavaScript代码,以下是函数exJS()的内容

var xmlhttp;
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
    document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
}
}
xmlhttp.open("GET","ajax.php", false);
xmlhttp.send();

这是ajax.php

<?php
  echo '<script language="javascript">
           alert("Hello World");
           var testVAR = "Hello World";
       </script>';
?>

现在,无论何时执行此函数exJS(),警报都不起作用,但当我使用F12查看源代码并查看div#myDiv"的内容时,我看到整个脚本都嵌入在div但由于某种原因,JavaScript仍然没有注册。

我甚至尝试访问JavaScript变量testVAR,当我点击F12时,我看到源代码中的变量,但是当我尝试访问该变量时,我得到一个错误,没有定义这样的变量。

请注意,这是一个简单的示例,因此没有错误,并且PHP代码回显很好,所有内容都是从PHP代码返回的,当我查看代码并查看{{{{ 1}}元素整个PHP echo内容都存在,但仍未执行。

此外,如果我直接打开div文件它工作正常,我的意思是我得到警报消息,但是当我执行函数ajax.php时,同样的事情不会发生进入jsEx()但没有任何反应,没有警报。

2 个答案:

答案 0 :(得分:0)

试试这个:

在我的WAMP(win 7,php 5.4)&amp;在IE11ChromeSafariFireFoxOpera中工作得很好(我没有任何其他内容;-))

index.html

<head>
<title>Testing DYNAMIC JS</title>
<script type="text/javascript">

function exJS(){
var xmlhttp;
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
    var script = document.createElement('script');
    script.onload = function() {
    // alert("Script loaded and ready");
    };
    script.setAttribute("type","text/javascript");
    script.text = xmlhttp.responseText;
    document.getElementsByTagName('head')[0].appendChild(script);
}
}
xmlhttp.open("GET","ajax.php", false);
xmlhttp.send();
}
</script>
</head>
<body onload="exJS();">
</body>
</html> 

ajax.php尝试:

<?php
  echo 'alert("Hello World"); var testVAR = "Hello World";';
?>

如果您想在div内运行脚本:

使用:

javaScript

if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
var MyDiv=document.getElementById("myDiv");
var arr = MyDiv.getElementsByTagName('script');
for (var n = 0; n < arr.length; n++)
    eval(arr[n].innerHTML);
}

php

<?php
  echo '<script language="javascript">
           alert("Hello World");
           var testVAR = "Hello World";
       </script>';
?>

希望它能帮助你。

答案 1 :(得分:0)

BTW jQuery有一个特定的AJAX函数来获取脚本:http://api.jquery.com/jquery.getscript/

如果你想避免使用jQuery,那么解决方法就是让你回复iframe,然后从iframe链接到生成实际Javascript的PHP。

E.G。样本ajax.php     

   if( isset($_GET['getscript']) ){
       header('Content-type: application/javascript'); #or header('Content-type: text/javascript');
       echo 'alert("The script is working.")';

       exit;

   }

   echo '<iframe src="ajax.php?getscript=1" frameborder="0"/>';
?>