我想执行一个从服务器通过 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”的函数定义放在调用脚本中就可以了。但我想将其保留在第二个脚本中。我该怎么办?服务器将跨度作为响应返回给客户端。单击“Test AJAX”范围时,应调用该函数。
<script>
插入到 DOM 中的标签不会被执行,除非你运行eval()
。在这里阅读更多内容:可以用innerHTML插入脚本吗? https://stackoverflow.com/questions/1197575/can-scripts-be-inserted-with-innerhtml
所以就你而言,test()
当您尝试单击跨度时将是未定义的,因为脚本代码尚未执行(因此从未定义过test
功能)。
你可以使用这样的方法来绕过它(在 DOM 注入之后):
var scripts = document.getElementById("rslt").getElementsByTagName("script");
for( var i=0; i<scripts.length; i++ ) {
eval(scripts[i].innerText);
}
(p.s. eval
is not evil)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)