Rac*_*ver 5 html javascript php ajax jquery
使用Ajax,我创建了一种控制台,允许我动态执行一些PHP函数.
问题是在一堆命令之后,控制台变得难以阅读.所以我创建了一个名为"wipe();"的javascript函数,它清除了<div>包含控制台的内容.
我用chrome的开发工具(javascript控制台)测试了这个功能,它运行得很好.
但是当我尝试通过使PHP-AJAX返回"<script> wipe(); </ script>"来调用此函数时,它不起作用.它什么都不做.
我在互联网上看到所有"<script> </ script>"彼此独立工作,但你可以<script>function</script>从另一个<script> </ script>块调用.
那为什么不这样做呢?
这是PHP代码:
echo '<script>wipe();</script>';
Run Code Online (Sandbox Code Playgroud)
这是第一个<script>块:
var xmlhttp = new XMLHttpRequest();
var span = document.getElementById("screen");
function send(data) {
window.setInterval(function() {
var elem = document.getElementById('screen');
xmlhttp = new XMLHttpRequest();
xmlhttp.open("GET", "./_rcons-transmetter.php?data="+data, true)
xmlhttp.onloadend = function() {
span.innerHTML = span.innerHTML+escapeHtml(data)+'<br>'+xmlhttp.responseText+'<br><br>';
}
xmlhttp.send();
}
function wipe(){
span.innerHTML = '';
}
Run Code Online (Sandbox Code Playgroud)
为了避免安全问题(如跨站点脚本攻击),HTML5 指定不应执行<script>通过innerHTML 插入的标签。
执行脚本的一种方法是使用eval()评估 html 。请注意:使用 eval 可能很危险。
var xmlhttp = new XMLHttpRequest();
var span = document.getElementById("screen");
function send(data) {
window.setInterval(function() {
var elem = document.getElementById('screen');
xmlhttp = new XMLHttpRequest();
xmlhttp.open("GET", "./_rcons-transmetter.php?data=" + data, true)
xmlhttp.onloadend = function() {
span.innerHTML = span.innerHTML + escapeHtml(data) + '<br>' + xmlhttp.responseText + '<br><br>';
evalJSFromHtml(span.innerHTML);
}
xmlhttp.send();
}
function wipe() {
span.innerHTML = '';
}
function evalJSFromHtml(html) {
var newElement = document.createElement('div');
newElement.innerHTML = html;
var scripts = newElement.getElementsByTagName("script");
for (var i = 0; i < scripts.length; ++i) {
var script = scripts[i];
eval(script.innerHTML);
}
}
}
Run Code Online (Sandbox Code Playgroud)