删除多页重新加载问题

I am trying to fetch the user favourite movies and other details and FB JS SDK. Following works correctly for me. I have tried to use ajax to remove page reload. But I dont find why page gets reloaded twice before Login button appear. And after user enters login credentials and click on login button, before data appear page reloaded twice. I want to remove this mutliple page reload. Can someone please review code and make is easier?

Login.php:

<?php
session_start();
$appId = '66'; 
$appSecret = 'sdsds3'; // Facebook App Secret
$return_url = 'http://yoursite.com/connect_script/';  //path to script folder
$fbPermissions = 'publish_stream,email'; //more permissions : https://developers.facebook.com/docs/authentication/permissions/

?>
<!DOCTYPE html>
<html xmlns:fb="http://www.facebook.com/2008/fbml" xml:lang="en-gb" lang="en-gb" ><head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
<title>JS/Ajax Facebook Connect</title>
 <script>
 function AjaxResponse()
 {
    var myData = 'connect=1'; 
     $.ajax({
    type: "POST",
    url: "process_facebook.php",
    data: myData
    }).done(function(result) {
    $("#fb-root").html(result);
    });
   }

function LodingAnimate() //Show loading Image
{
    $("#LoginButton").hide(); //hide login button once user authorize the application
}
 </script></head><body>
<?php
if(!isset($_SESSION['logged_in']))
{
?>
    <div id="results">    </div>
    <div id="LoginButton">
    <div class="fb-login-button" onlogin="javascript:CallAfterLogin();" size="medium" scope="<?php echo $fbPermissions; ?>">Connect With Facebook</div>
    </div>
<?php
}
?>
<div id="fb-root"></div>
<script type="text/javascript">
window.fbAsyncInit = function() {
FB.init({
    appId: '<?php echo $appId; ?>',
    cookie: true,
    xfbml: true,
    channelUrl: '<?php echo $return_url; ?>channel.php',
    oauth: true});};

(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);}());

function CallAfterLogin(){
        FB.login(function(response) {
        if (response.status === "connected")
        {
            LodingAnimate(); //Animate login
            FB.api('/me', function(data) {
//            $("#fb-root").append(data.);
            console.log(data);
              if(data.email == null)
              {
                    //Facbeook user email is empty, you can check something like this.
                  alert("You must allow us to access your email id!");
                    ResetAnimate();

              }else{
                    AjaxResponse();
              } }); 
         }     });  }
</script>
</body>
</html>

process_facebook.php:

<?php
session_start();
$appId = '66549'; //Facebook App ID
$appSecret = '3944'; // Facebook App Secret
$return_url = 'http://yoursite.com/connect_script/';  //path to script folder
//$fbPermissions = 'publish_stream,email'; //more permissions : https://developers.facebook.com/docs/authentication/permissions/

if(isset($_POST["connect"]) && $_POST["connect"]==1)
{
    if (!class_exists('FacebookApiException')) {
    require_once('facebook.php' );
    }
        $facebook = new Facebook(array(
        'appId' => $appId,
        'secret' => $appSecret,
    ));
    $fbuser = $facebook->getUser();
 if ($fbuser) {
        try {
         $user_interest = $facebook->api('/me/movies');
        //print user facebook data
        echo '<pre>';
        //print_r($user_interest);
        foreach ($user_interest['data'] as $var)
    {
         $ID=$var['id'];
         $Name=$var['name'];
         echo '<br/>';
         print_r($Name); echo '<br/>';
         print_r($ID);

    }
        echo '</pre>';
}
 catch (FacebookApiException $e) {
    echo '<pre>'.htmlspecialchars(print_r($e, true)).'</pre>';
    $user = null;
  }}}
?>

1个回答



使用“onlogin”和“scope”属性代替“fb-login-button”,只需创建一个简单的按钮/链接/其他 并在“onclick”事件中调用“CallAfterLogin”。 你没有正确使用FB.login,例如,你必须放在范围内。</ p>

见这里: https://developers.facebook.com/docs/reference/javascript/FB.login/ </ p> \ n

我不会调用函数“CallAfterLogin”btw,因为它不是在登录后调用的,它是登录代码。 而且你根本不需要process_facebook.php,你可以使用JavaScript SDK,而不使用jQuery / Ajax。</ p>
</ div>

展开原文

原文

Instead of "fb-login-button" with "onlogin" and "scope" attributes, just make a simple button/link/whatever and call "CallAfterLogin" in the "onclick" event. you´re not using FB.login correctly, THAT´s where you have to put in the scope, for example.

See here: https://developers.facebook.com/docs/reference/javascript/FB.login/

I´d not call the function "CallAfterLogin" btw, because it´s not called AFTER login, it IS the login code. And you don´t need the process_facebook.php at all, you can just do that with the JavaScript SDK, without using jQuery/Ajax.

dongluni0568
dongluni0568 我不能雇用,但我能做到!
大约 7 年之前 回复
doujue6196
doujue6196 学习javascript。 这是你得到的最佳答案;) - 我们不是来提供完整的解决方案,我们在这里指导你(自己)开发一些东西。 否则你可以雇一个人;)
大约 7 年之前 回复
doujiu8479
doujiu8479 是的你是对的,它是真正无意义的代码,我?fields =电影,电子邮件给我电影列表,但我无法在浏览器上以现有代码的方式显示它! 我尝试使用JS,但我发现另一个文件上的php代码是服务器端代码,我不能使用javascript,所以我要保持附加自己的ajax和php文件! 如果您有任何想法可以解决这个问题,我等待着! 我在javascript和相关链接中尝试了谷歌与谷歌。
大约 7 年之前 回复
dsdzz04802
dsdzz04802 我告诉你要忘记ajax和你的php文件,用javascript sdk做一切。 你正在生成很多无意义的代码。 但是10-15秒肯定是太多了。 >我?fields =电影,电子邮件
大约 7 年之前 回复
douxi4287
douxi4287 现在我正在向process_facebook发送请求,这需要花费时间,因此在浏览器上显示数据需要时间。 如果我删除它并且我可以在第一页本身执行相同的任务,那么可以减少时间。 查看提取的数据需要10-15秒。 还是有其他原因导致这种延误?
大约 7 年之前 回复
douao1959
douao1959 如果没有jquery ajax,我怎么能这样做?
大约 7 年之前 回复
douduan4116
douduan4116 让我们在聊天中继续讨论
大约 7 年之前 回复
dosf40815
dosf40815 scope不是button的属性,只在fb.login登录中设置范围;)
大约 7 年之前 回复
doushi6932
doushi6932 <button type =“button”onclick =“CallAfterLogin()”scope =“<?php echo $ fbPermissions;?>”>点击我!</ button>这就是你说的吗? 这也行不通!
大约 7 年之前 回复
douyueju2912
douyueju2912 好吧,电子邮件当然不在/ me / movies连接中,您必须使用登录范围中的电子邮件权限才能在/ me连接中获取电子邮件。
大约 7 年之前 回复
douhan8581
douhan8581 我已经尝试过了,但它提供了错误,您必须允许访问您的电子邮件,可能是它从/我访问电子邮件
大约 7 年之前 回复
doulieyu0881
doulieyu0881 你可以改变这一行:FB.api('/ me',函数(数据) - 切换到/ me / movies和下一行的console.log条目应该提供的东西
大约 7 年之前 回复
duanqi6007
duanqi6007 谢谢伙计,你能告诉我如何打印console.log(数据); 浏览器上的数据在控制台中写入的位置? 我想在浏览器上打印/我/电影而不转移到process_facebook!
大约 7 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐