2017-10-18 93 views
0

我知道这个问题出现了很多,但我还没有能够解决我的问题。如何动态更新元标记

我有一个由PHP驱动的网站,其中包含视频。不同的视频有自己的网址,如index.php?id = 1。对于Facebook分享,我希望每个视频/网址都有更新的元标记。

每个视频的信息(标题,说明等)都存储在数据库中,并且我成功将该信息检索到我的网站。

下面是从JavaScript传递一个变量到PHP脚本:

<script> 
     var video; 
     var URL = document.location; 

     function setVideo(src){ 
      video = src; 

      $(document).ready(function(){ 
        $.ajax({ 
         url: URL, 
         type: 'GET', 
         data: { 
          videoPHP: video,  
          }, 
         success: function(data) { 
          // This prints the php result to html 
          $('#headerFromFile').html(data) 
         } 
        }); 
      }); 
     } 
</script> 

这里是PHP:

if (isset($_GET['videoPHP'])) { 

    $videoID = $_GET['videoPHP']; 

    // SQL query 
    $sql = "SELECT * FROM Videos WHERE ID='$videoID'"; 
    $result = $connect->query($sql); 
    $row = $result->fetch_assoc(); 
    ?> 

    <h1><?php echo $row['Header'];?></h1> 
    <p><?php echo $row['Description'];?></p> 
<?php 

通过这样做,我能够呼应标题和描述视频到div #headerFromFile在我的html文档中。

但问题是,我想有存储到元属性=此信息“OG:标题为”元属性=“OG:说明”当前URL的

任何帮助,高度赞赏。

+0

[更改元标签动态使用jQuery]的可能的复制( https://stackoverflow.com/questions/7308970/changing-meta-tags-dynamic-with-jquery) –

+0

当'index.php?id = 1'时,您的_server_需要使用正确的元数据返回HTML文档请求。您不能使用客户端代码设置OG元标记,Facebook刮板并不关心这一点。您基本上想要完全取消AJAX部分,并将PHP代码移动到'head'中,并使其在那里输出元标记。 – CBroe

+0

太棒了。那就是诀窍。我摆脱了ajax,并将php部分移到html的头部。从那里我可以将php变量直接回显到meta标签中。 谢谢! –

回答

0

元标记是在你的ajax运行之前写入dom的。我建议你在页面加载之前获得数据库的数据回合,并将变量放入元标记中。

但是,如果我理解正确,在加载dom之后您的内容可能会更改,并且在发布到Facebook时会读取旧的元数据。我不;吨知道这是否会帮助因为Facebook可能无法获得更新的meta标签要么但尝试OT改变超常踏歌这样的...

$('meta[name=description]').remove(); 
$('head').append("<meta name='description' content='Video Title'>"); 
+0

facebook无法运行JavaScript,因此使用javascript更改元标记毫无意义。 – luschn