在Ajax的加载页面中访问导入的Facebook脚本

时间:2011-10-31 18:44:10

标签: jquery ajax facebook

我正在使用基于AJAX的facebook登录系统,我遇到了一些问题......

我有一个带有Facebook登录按钮的表单页面,第一次通过PHP导入,然后每当有人点击按钮时通过AJAX调用,如果登录成功则更改内容,或者如果没有成功则显示相同的表单

<form method="post" id="regist_form" enctype="application/x-www-form-urlencoded" action="asd.php">
<table>
<tr>
    <?php echo $this->form->username; ?>
</tr>
<tr>
    <?php echo $this->form->password; ?>
</tr>
<tr>
<td><br/><script type="text/javascript">
    document.write('<div class="fb-login-button" id="face_login" onlogin="loginAsFacebook()" scope="email,user_activities,publish_stream">Facebook</div>');
</script>
</td>
<td><br/>
    <?php echo $this->form->login_form_csrf.$this->form->login_user; ?>
</td>
</tr>
</table>
</form>

问题是,当我通过AJAX调用此表单页面时,页面会以某种方式刷新并在中间中断。但是,当它通过PHP加载时,它加载OK ...

我在没有Facebook登录按钮的情况下尝试过,它也能正常工作......

经过一些尝试,我发现问题与 document.write 有关... 我改成了:

$(document).ready(function(){
    $('#face_gen').append('<div class="fb-login-button" class="face_login" onlogin="loginAsFacebook()" scope="email,user_activities,publish_stream">Facebook</div>');
    FB.XFBML.parse(document.getElementById('face_login'));
});

现在它可以通过AJAX加载,但不会显示Facebook的按钮......

可能是因为我在父页面上加载了facebook的所有脚本吗?

<script src="//connect.facebook.net/en_US/all.js" type="text/javascript"></script>
<script type="text/javascript">
    FB.init({
        appId      : 'xxxxxxxxxxxxxxx', // App ID
        status     : true, // check login status
        cookie     : true, // enable cookies to allow the server to access the session
        oauth      : true, // enable OAuth 2.0
        xfbml      : true, // parse XFBML
        fbml5        : true
    });
</script>

我尝试过使用它,但它也不起作用:

$("#user_reg_login").load("logincontent/logincontent/",function(){
    FB.XFBML.parse(document.getElementById('face_login'));
});

我现在缺少什么来正确渲染按钮?

1 个答案:

答案 0 :(得分:1)

好的,我知道如何让它发挥作用。

以下是解决方案:

<form method="post" id="regist_form" enctype="application/x-www-form-urlencoded" action="">
<table>
    <tr>
        <?php echo $this->form->username; ?>
    </tr>
    <tr>
        <?php echo $this->form->password; ?>
    </tr>
    <tr>
        <td id="face_gen"><br/><script type="text/javascript">
            $(document).ready(function(){
                $('#face_gen').append('<div class="fb-login-button" class="face_login" onlogin="loginAsFacebook()" scope="email,user_activities,publish_stream">Facebook</div>');
                FB.XFBML.parse(document.getElementById('face_login'));
            });
        </script>

        </td>
        <td><br/>
            <?php echo $this->form->login_form_csrf.$this->form->login_user; ?>
        </td>
    </tr>
</table>
</form>

我忘了说我正在使用Zend Framework。

现在它在AJAX调用= D后很好地呈现按钮。