好的,这应该很容易吗? 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工作。 必须有一些我遗漏的细节。 任何想法????
答案 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