javascript - 如何在 facebook javascript sdk 完全加载后运行 php 代码

标签 javascript php facebook facebook-javascript-sdk facebook-php-sdk

我正在使用 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/

相关文章:

php - mysql vs mysqli 结果不一样?

javascript - 不点击提交按钮的下拉选择

php - 有没有办法自动调整数据库名、用户名和密码

ios - Facebook graph api 最后已知位置

javascript - 在不隐藏键盘的情况下从 WebView 评估 Javascript

javascript - 在 jQuery 的 if 条件中使用 AND 运算符

javascript - Azure存储服务REST API的授权

ios - Facebook SDK 登录不适用于 iOS 10、Xcode 8 上的模拟器

facebook - facebook sdk对贴墙有限制吗

javascript - for 循环和变量范围