[英]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.