2

我正在开发一个使用php sdk的facebook应用程序,并尝试从JavaScript SDK获取访问令牌。但问题是JavaScript SDK需要时间加载和我的PHP代码运行在JavaScript SDK完全加载之前,这就是为什么我无法获得访问令牌。 这是我的代码。如何在facebook之后运行php代码javascript sdk完全加载

<script> 
    window.fbAsyncInit = function() { 
    FB.init({ 
    appId : '{app-id}', 
    cookie : true, 
    version : 'v2.4' 
}); 
    }; 

    (function(d, s, id){ 
    var js, fjs = d.getElementsByTagName(s)[0]; 
    if (d.getElementById(id)) {return;} 
    js = d.createElement(s); js.id = id; 
    js.src = "//connect.facebook.net/en_US/sdk.js"; 
    fjs.parentNode.insertBefore(js, fjs); 
    }(document, 'script', 'facebook-jssdk')); 


</script> 
<?php 
require __DIR__ . '/Facebook/autoload.php'; 

$fb = new Facebook\Facebook([ 
    'app_id' => '............', 
    'app_secret' => '..................', 
    'default_graph_version' => 'v2.4', 
]); 

if(!isset($_SESSION["AccessToken"])) { 

$helper = $fb->getJavaScriptHelper(); 
try { 
    $accessToken = $helper->getAccessToken(); 

if(isset($accessToken)) { 
$_SESSION["AccessToken"]= (string)$accessToken; 
} 
} catch(Facebook\Exceptions\FacebookResponseException $e) { 
    // When Graph returns an error 
    echo 'AccessGraph returned an error: ' . $e->getMessage(); 

session_destroy(); 
exit; 
} catch(Facebook\Exceptions\FacebookSDKException $e) { 
    // When validation fails or other local issues 
    echo 'Facebook SDK returned an error: ' . $e->getMessage(); 
    session_destroy(); 
exit; 
} 
} 

echo $_SESSION["AccessToken"]; 

?> 

如果我的代码正常工作重新加载页面,我顺利拿到了访问令牌,因为JavaScript SDK已经加载。 请告诉我如何解决这个问题?

+0

您正在使用哪种“登录”方法? JS或PHP?你为什么混合东西? – Rayon

回答

2

正常情况下,您的php文件将被执行,并且浏览器显示结果。

这意味着您的php代码将在您的脚本生成的任何JavaScript生成甚至交付给浏览器执行之前运行。

如果您确实需要在js代码之后运行php代码,那么您应该使用javascript在您的js的所有必要库加载后立即加载php代码。

使用jquery可以这样做。

<div id="success"></div> 
<div id="error"></div> 

<script> 
    $("#success").load("/my-file.php", function(response, status, xhr) { 
    if (status == "error") { 
    var msg = "Error occured while loading my script: "; 
    $("#error").html(msg + xhr.status + " " + xhr.statusText); 
    } 
}); 
</script> 

竟被这个加载my-file.php,显示它的输出div#success和给你一个错误消息div#error如果有什么差错。

+0

_Normally_?另一种情况是什么时候呢? – Rayon

+0

只要javascript是由相同的php文件生成的,没有其他情况。 – maxhb

+0

我发现解决方案只是在你的页面的头部使用你的JavaScript,然后它会在你的php代码之前加载。 –

相关问题