我正在使用 php sdk 开发 Facebook 应用程序,并尝试从 JavaScript SDK 获取访问 token 。但问题是 javascript SDK 需要时间加载,并且我的 php 代码在 javascript SDK 完全加载之前运行,这就是为什么我无法获取访问 token 。 这是我的代码。
<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"];
?>
如果我重新加载页面,代码可以正常工作,并且我成功获取访问 token ,因为 JavaScript SDK 已经加载。 请告诉我如何解决这个问题?
最佳答案
通常您的 php 文件将被执行,结果将由浏览器显示。
这意味着您的php 代码将在脚本生成的任何 JavaScript 传送到浏览器执行之前运行。
如果您确实必须在 js 代码之后运行 php 代码,那么您应该在加载 js 的所有必要库后立即使用 javascript 加载 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
中为您提供错误消息如果出现任何问题。
关于javascript - 如何在 facebook javascript sdk 完全加载后运行 php 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34759538/