Javascript 如何在动态创建的JqueryMobile多页html文件中将正确的变量传递给FB.ui脚本

Javascript 如何在动态创建的JqueryMobile多页html文件中将正确的变量传递给FB.ui脚本,javascript,php,jquery,facebook,facebook-graph-api,Javascript,Php,Jquery,Facebook,Facebook Graph Api,我正在使用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 = { meth

我正在使用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 ....
函数打印\u共享脚本($value){
回声“
init({appId:\“$\u会话[appId]\”,状态:true,cookie:true});
函数postToFeed(){
//正在调用API。。。
var obj={
方法:“提要”,
链接:“$values[link]”,
图片:“$values[picture]”,
名称:“$value[name]”,
标题:“$value[标题]”,
说明:“$value[description]”
};
函数回调(响应){
//document.getElementById('msg').innerHTML=\“Post ID:\”+response['Post\u ID'];
}
FB.ui(obj,回调);
}
";
}
... 代码。。。
foreach($des=>$val){
//分解$val并填充$values[$des][…]数组($des:从0到10)
打印共享脚本($value[$des]);
echo“//我的输出…”;
呼应“分享”;
}
.... 代码。。。。
除了共享值始终是最后一个数组值之外,所有运行正常。 如果我看html代码,循环中的每个脚本都有正确的值,但FB共享弹出窗口中的值是错误的

我想这个问题是由于obj变量引起的。
我怎样才能纠正这个错误

如果查看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 ....
//实际上可以将其移动到.js或.html文件中
函数print\u sharescript($value){
回声“
init({appId:\“$\u会话[appId]\”,状态:true,cookie:true});
功能postToFeed(obj){
obj.method='feed';
函数回调(响应){
//document.getElementById('msg').innerHTML=\“Post ID:\”+response['Post\u ID'];
}
FB.ui(obj,回调);
}
";
}
... 代码。。。
打印共享脚本();
foreach($des=>$val){
$json=addslashes(json_encode($val));
呼应“分享”;
}
.... 代码。。。。

还可以考虑采用一些模板系统。

看起来不错,但对我来说不起作用,我不能将脚本放在循环之外,因为整个页面都是在循环中生成的。foreach($des=>$val){echo“….echo”;}是否可以使用$des值更改java脚本中的函数名或变量名?