在通过 AJAX 响应发送的页面上执行 javascript 函数
Execute javascript function on a page sent via AJAX response
我想执行一个通过服务器通过 AJAX 请求发送的函数。函数体不在调用页中。例如:(完整代码如下)
1.调用PHP脚本:
<script>
function fun()
{
try{
// Opera 8.0+, Firefox, Safari
ajaxRequest = new XMLHttpRequest();
} catch (e){
// Internet Explorer Browsers
try{
ajaxRequest = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try{
ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e){
// Something went wrong
alert("Your browser broke!");
return false;
}
}
}
ajaxRequest.onreadystatechange = function(){
if(ajaxRequest.readyState == 4){
document.getElementById("rslt").innerHTML = ajaxRequest.responseText;
}
}
ajaxRequest.open("GET", "ajax_js2.php", true);
ajaxRequest.send(null);
}
</script>
<input type="button" onclick="fun()">
<div id="rslt">
</div>
2.ajax_js2.php脚本:
<script>
function test()
{
alert("Hello");
}
</script>
<span onclick="test()">Test AJAX</span>
我知道将"test"的函数定义放在调用脚本中就可以了。但我想把它保留在第二个剧本中。我该怎么办?服务器将跨度作为对客户端的响应返回。单击跨度"测试 AJAX"时,应调用该函数。
插入
DOM <script>
标签将不会执行,除非您运行 eval()
。在这里阅读更多:脚本可以使用innerHTML插入吗?
因此,在您的情况下,当您尝试单击跨度时,test()
将未定义,因为脚本代码尚未执行(因此从未定义test
函数)。
你可以使用这样的东西来解决它(在 DOM 注入之后):
var scripts = document.getElementById("rslt").getElementsByTagName("script");
for( var i=0; i<scripts.length; i++ ) {
eval(scripts[i].innerText);
}
(附言 eval
不是邪恶的)
相关文章:
- 如何做到这一点,使代码在不传递条件后执行函数
- javascript自执行函数-不同的语法
- JavaScript:只有当数组中的所有项都为true时才执行函数
- iFrame url更改时执行函数
- 为什么AngularJS在每个摘要循环上都执行函数
- 如何使用setInterval执行函数
- 当*ngFor以角度2结束时执行函数
- Ajax调用完成后如何执行函数
- 在显示引导弹出窗口之前执行函数
- 从自执行函数返回函数的Javascript性能命中率
- 在操作完成时执行函数
- jquery/js中的自执行函数
- 如何仅在完成对gap.client.youtube的请求.execute后执行函数
- 构造函数函数中的自执行函数的OO上下文/范围
- Javascript未使用=运算符执行函数
- AngularJS:如何按照预定义的顺序执行函数
- 在不使用隔离作用域的情况下执行函数的角度指令
- 如何在页面加载后执行函数是在 AngularJS 中完成的
- 完成页面加载后执行函数
- 如何在完成完全执行函数后触发循环