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代碼之前加載。 –

相關問題