我遇到了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加载但脚本不会执行。 正文部分的脚本已经过检查并且运行良好。 问题在哪里?
谢谢!
答案 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');