0

FB.ui を使用して、動的に作成された Jquery マルチページ内の Facebook ユーザー ウォールに投稿していますか?

function print_sharescript($values) {
echo "
<script> 
  FB.init({appId: \"$_SESSION[appId]\", status: true, cookie: true});
  function postToFeed() {
    // calling the API ...
    var obj = {
      method: 'feed',
      link: '$values[link]',
      picture: '$values[picture]',
      name: '$value[name]',
      caption: '$value[caption]',
      description: '$value[description]'
    };
    function callback(response) {
      // document.getElementById('msg').innerHTML = \"Post ID: \" + response['post_id'];
    }
    FB.ui(obj, callback);
  }
</script>
";
 }

 ... code ...
 foreach ($des=>$val) {
      // explode $val and fill the $values[$des][...] array ($des: from 0 to 10)
      print_sharescript($values[$des]);
      echo "// MY OUTPUT....";
      echo "<a onclick='postToFeed(); return false;'>Share</a>";
 }
 .... code ....

共有値が常に最後の配列値であることを除いて、すべて正常に実行されます。HTMLコードを見ると、ループ内のすべてのスクリプトには正しい値がありますが、FB共有ポップアップの値は間違っています..

私が推測する問題は、obj 変数によるものです。どうすればエラーを修正できますか?

4

1 に答える 1

0

PHP コードの出力を見ると、postToFeed JavaScript 関数の定義が繰り返されていることがわかります。関数は毎回同じ名前を持つため、最新のメンションによって他のすべての定義が上書きされます。

これはテストされていない疑似 PHP ですが、次のような方法を試すことができます。

// You could actually move this into your .js or .html file instead
function print_sharescript($values) {
echo "
<script> 
  FB.init({appId: \"$_SESSION[appId]\", status: true, cookie: true});
  function postToFeed(obj) {
    obj.method = 'feed';
    function callback(response) {
      // document.getElementById('msg').innerHTML = \"Post ID: \" + response['post_id'];
    }
    FB.ui(obj, callback);
  }
</script>
";
 }

 ... code ...
 print_sharescript();
 foreach ($des=>$val) {
 $json = addslashes(json_encode($val));
      echo "<a onclick='postToFeed($json); return false;'>Share</a>";
 }
 .... code ....

また、いくつかのテンプレート システムの採用も検討してください。

于 2013-09-15T11:45:48.010 に答える