在ajax之后执行javascript

时间:2012-12-15 21:25:02

标签: javascript ajax

我遇到了ajax的问题​​,即Javascript在页面加载后无法呈现。 我有这段代码:

<script>
    function loadXMLDoc() {
        var xmlhttp;
        if (window.XMLHttpRequest) { // code for IE7+, Firefox, Chrome, Opera, Safari
            xmlhttp = new XMLHttpRequest();
        } else { // code for IE6, IE5
            xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
        }
        xmlhttp.onreadystatechange = function () {
            if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
                document.getElementById("fb-root").innerHTML = xmlhttp.responseText;
            }
        }
        xmlhttp.open("GET", "like.php", true);
        xmlhttp.send();

    }
</script>
</head>
<body>
    <div id="fb-root"></div>
    <script>
        window.fbAsyncInit = function () {

            FB.init({
                appId: 'XX',
                status: true,
                cookie: true,
                xfbml: true
            });

            FB.getLoginStatus(function (o) {
                if (!o && o.status) return;
                if (o.status == 'connected') {
                    // USER IS LOGGED IN AND HAS AUTHORIZED APP
                    window.onload = loadXMLDoc();
                } else if (o.status == 'not_authorized') {

                    window.onload = loadXMLDoc();
                } else {
                    // USER NOT CURRENTLY LOGGED IN TO FACEBOOK
                    document.write("connect3")

                }
            });

        };

        (function () {
            var e = document.createElement('script');
            e.async = true;
            e.src = document.location.protocol +
                '//connect.facebook.net/en_US/all.js';
            document.getElementById('fb-root').appendChild(e);
        }());
    </script>

like.php文件包含

<?php echo  <script src='/facebook/src/like.js'></script>; ?>

当用户登录facebook时,ajax加载但脚本不会执行。 正文部分的脚本已经过检查并且运行良好。 问题在哪里?

谢谢!

2 个答案:

答案 0 :(得分:1)

Can scripts be inserted with innerHTML?

上面的链接解决了这个问题。要加载脚本标记内容,您可能希望使用dom操作而不是使用innerHTML来简单地注入新的脚本标记。在您发布的脚本的异步fb部分中为您提供了一个示例。

var e = document.createElement('script');
e.async = true;
e.src = '/facebook/src/like.js';
document.getElementById('fb-root').appendChild(e);

假设php代码不执行任何其他操作,这具有相同的效果。另外值得指出的是,您当前的实现将从dom中删除all.js文件(因为您设置了innerHTML)。

答案 1 :(得分:1)

like.php中的echo不包含引号。 应该是

<?php echo "<script src='/facebook/src/like.js'></script>"; ?>

FB.getLoginStatus也没有被解雇

提示:如果您使用Firefox(或其他浏览器的其他调试工具)并使用console.log()

,请使用firebug

可能的解决方案:用

替换函数loadXMLDoc的内容
jQuery('#fb-root').load('like.php');
相关问题