0

我有一个 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 加载但脚本不执行。正文部分的脚本经过检查并且运行良好。问题出在哪里?

谢谢!

4

2 回答 2

1

可以用 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 代码不执行任何其他操作,这具有相同的效果。另外值得指出的是,您当前的实现将从all.jsdom 中删除文件(因为您设置了 innerHTML)。

于 2012-12-15T21:38:03.243 回答
1

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

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

也不触发 FB.getLoginStatus

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

可能的解决方案:将函数 loadXMLDoc 的内容替换为

jQuery('#fb-root').load('like.php');
于 2012-12-15T21:46:34.583 回答