微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php – 在通过AJAX响应发送的页面上执行javascript函数

我想执行一个通过服务器的 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”的函数定义会做.但是我想把它放在第二个脚本中.我该怎么办?服务器返回span作为对客户端的响应.在单击跨度“Test AJAX”时,应该调用函数.

解决方法

<脚本>除非运行eval(),否则不会执行插入DOM的标记.在这里阅读更多: Can scripts be inserted with innerHTML?

因此,在您的情况下,当您尝试单击span时,test()将是未定义的,因为脚本代码尚未执行(因此从未定义测试函数).

您可以使用类似的东西来解决它(在DOM注入之后):

var scripts = document.getElementById("rslt").getElementsByTagName("script");
for( var i=0; i<scripts.length; i++ ) {
    eval(scripts[i].innerText);
}

(p.s.eval并不邪恶)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐