2013-06-24 50 views
1

我在下面的代碼中得到一個javascript錯誤。 我得到的錯誤是「Uncaught ReferenceError:FB is not defined。postToFeed(anonymous function)」。 有人可以幫助我嗎? 在此先感謝。FB.ui獲取js錯誤

window.fbAsyncInit = function() { 
     FB.init({ 
      appId  : '<?= APP_ID ?>', // App ID 
      channelUrl : '.....', // Channel File 
      status  : true, // check login status 
      cookie  : true, // enable cookies to allow the server to access the session 
      xfbml  : true // parse XFBML 
     }); 

     // Additional initialization code here 
    }; 

    // Load the SDK Asynchronously 
    (function(d){ 
     var js, id = 'facebook-jssdk', ref = d.getElementsByTagName('script')[0]; 
     if (d.getElementById(id)) {return;} 
     js = d.createElement('script'); js.id = id; js.async = true; 
     js.src = "//connect.facebook.net/en_US/all.js"; 
     ref.parentNode.insertBefore(js, ref); 
    }(document)); 

    function postToFeed() { 
     var obj = { 
      method: 'feed', 
      link: '<?= REDIRECT_URL ?>', 
      picture: '<?= SHARE_IMAGE ?>', 
      name: unescape('<?= SHARE_TITLE ?>'), 
      caption: unescape('<?= SHARE_CAPTION ?>'), 
      description: unescape('<?= SHARE_DESCRIPTION ?>') 
     }; 

     function callback(response) { 
      console.log(response); 
      //alert("Message posted to your wall, thanks!"); 
      if (response && response.post_id) { 
       alert('Success'); 
       window.location="page.php"; 
      }  else { 
       alert('Fail.'); 
      } 
     } 
     FB.ui(obj, callback); 
    } 

    function sendToFriend() { 
     var obj = { 
      method: 'send', 
      link: '<?= REDIRECT_URL ?>', 
      picture: '<?= SHARE_IMAGE ?>', 
      name: unescape('<?= SHARE_TITLE ?>'), 
      caption: unescape('<?= SHARE_CAPTION ?>'), 
      description: unescape('<?= SHARE_DESCRIPTION ?>') 
     }; 

     function callback(response) { 
      console.log(response); 

      //alert("Message sent to your friend(s), thanks!"); 
      if (response && response.post_id) { 
       alert("Success!"); 
       window.location="page.php"; 
      } else { 
       alert('Fail.'); 
      } 
     } 

     FB.ui(obj, callback); 
    } 
+0

您何時/在哪裏調用您的'postToFeed'函數?也許SDK在那個時候還沒有加載和初始化。 (有關SDK初始化的其他錯誤/消息?) – CBroe

+0

我在同一頁面調用postToFeed,sendToFriend也是。我的問題是,當我向朋友發送消息時,我從else語句中收到消息「失敗」。但消息發送成功。我現在遇到了另一個錯誤「阻止了一個源於框架的https://www.facebook.com」訪問源自「http://mysite.com」的框架,請求訪問的框架的協議爲「https」 ,正在訪問的幀的協議爲「http」,協議必須匹配 –

+0

這些與您之前描述的錯誤完全不同,對於「失敗」行爲,這是可以預料的,因爲發送對話框沒有返回一個帖子的ID,因爲它不是_making_一個帖子... – CBroe

回答

0

對於您的第二個問題(從評論)
發送回報POST_ID在應對方法,這就是爲什麼它即使在發佈成功後進入else塊。檢查控制檯中的響應,唯一返回的是成功參數success : true

對於您的第一個問題
您打電話postToFeed()太快,即Facebook SDK仍在加載。嘗試撥打電話window.onload

+0

謝謝你的答案,你能解釋一下在哪裏放置window.onload? –

+0

試着把它放在postToFeed()函數之前。如果這能解決你的問題,請接受答案。 – ThePCWizard

+0

你可以複製我的代碼,並將其與window.onload粘貼?對不起,但我不知道你是什麼意思。謝謝 –