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

facebook javascript sdk完全加载后如何运行php代码,javascript,php,facebook,facebook-javascript-sdk,facebook-php-sdk,Javascript,Php,Facebook,Facebook Javascript Sdk,Facebook Php Sdk,我正在使用PHPSDK开发一个facebook应用程序,并尝试从JavaScript sdk获取访问令牌。但问题是javascript-SDK需要花时间加载,我的php代码在javascript-SDK完全加载之前运行,这就是我无法获取访问令牌的原因。 这是我的密码 <script> window.fbAsyncInit = function() { FB.init({ appId : '{app-id}', cookie : true, version

我正在使用PHPSDK开发一个facebook应用程序,并尝试从JavaScript sdk获取访问令牌。但问题是javascript-SDK需要花时间加载,我的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"];

?>

window.fbAsyninit=函数(){
FB.init({
appId:“{app id}”,
曲奇:是的,
版本:“v2.4”
});
};
(功能(d、s、id){
var js,fjs=d.getElementsByTagName[0];
if(d.getElementById(id)){return;}
js=d.createElement;js.id=id;
js.src=“//connect.facebook.net/en_US/sdk.js”;
fjs.parentNode.insertBefore(js,fjs);
}(文档“脚本”、“facebook jssdk”);
如果我重新加载页面,代码将正常工作,并且我成功地获得了访问令牌,因为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>

$(“#success”).load(“/my file.php”),函数(响应、状态、xhr){
如果(状态=“错误”){
var msg=“加载我的脚本时出错:”;
$(“#error”).html(msg+xhr.status+“”+xhr.statusText);
}
});

这将加载
my file.php
,在
div#success
中显示它的输出,并在
div#error
中显示错误消息,如果出现任何错误。

正常吗?如果不是,那么其他情况是什么?没有其他情况,只要javascript是由同一个php文件生成的。我发现解决方案只需在页面的标题部分使用javascript,然后它将在php代码之前加载。您使用的是哪种
登录
方法?JS还是PHP?你为什么把东西混在一起?