0

ページの読み込み後に Javascript がレンダリングされない ajax に問題があります。私はこのコードを持っています:

<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 でスクリプトを挿入できますか?

上記のリンクは、この問題に対処しています。スクリプト タグのコンテンツをロードするには、innerHTML を使用するのではなく、dom 操作を使用して新しいスクリプト タグを単純に挿入することをお勧めします。投稿したスクリプトの async 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 を設定しているため)。

于 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 に答える