【问题标题】:Auto Refresh document title?自动刷新文档标题?
【发布时间】:2011-09-16 13:00:00
【问题描述】:

我尝试了很多方法让页面标题每 3 秒自动更新一次,这样标题就可以显示他们有多少未读消息。

这是我尝试过的:

setInterval(function() {
        document.title = "<?php echo $inboxcc; ?>";
    }, 3000);

$(function() {
setInterval(function() {
     $(this).attr("title", "<?php echo $inboxcc; ?>");
    }, 3000);
});

但它们都不起作用。

【问题讨论】:

    标签: javascript jquery refresh title setinterval


    【解决方案1】:

    每次需要新数据时都需要从服务器刷新数据,因为 PHP 块在每次页面视图(在服务器上)仅执行一次。制作一个这样的 PHP 页面:

    <?php
      // data.php
      // Grab the user from the session and calculate the 'unread messages' value
      $user['inboxcc'] = the_unread_messages_value;
      echo json_encode($user);
    ?>
    

    然后像这样动态拉号:

    var updater = function() {
        $.getJSON('data.php',function(jsonuser){
            document.title = jsonuser.inboxcc;
            setTimeout(updater,3000);
        });
    };
    
    setTimeout(updater,3000);
    

    请注意,我使用setTimeout 而不是setInterval,因为您不能确定每个请求都会在 3 秒内返回。一般来说,使用setTimeout 会更好。

    【讨论】:

    • 我不太明白在data.php页面中放什么
    • @Andy:无论您在原始页面上使用什么代码来计算 $inboxcc 值,都应该在其中。然后将该值放入具有 $user['inboxcc'] = the_value; 行的用户对象中
    • 无法让它工作。我一定做错了什么。不过还是谢谢
    【解决方案2】:

    这种方法行不通。您的 PHP 语句将在服务器端执行一次,因此无论您在 JavaScript 中做什么,标题都不会更改多次。

    您需要一种基于 AJAX 的方法,它会将 document.title 属性设置为成功:

    $.ajax({
      url: 'new_page_title.php',
      data: {name: 'username', password: 'userpass'},
      success: function(data) { document.title = data;},
      dataType: 'text'
    });
    

    现在:虽然您当然可以将此代码放入setInterval 调用中,但我建议每 3 秒检查一次它在您的服务器上可能会有点困难,而且没有必要。每 15 - 60 秒会更温和。

    setInterval(function() {
        $.ajax({
            ...
        });
    }, 30000); // milliseconds
    

    【讨论】:

      【解决方案3】:

      为了补充@mblase75 的回答(这是正确的),这里进一步解释了您所陷入的常见误解。


      PHP 是一个服务器端预处理器,它输出 HTML 和 Javascript,然后发送到您的浏览器,然后与任何其他内容无关。

      那么,你的 PHP:

      <?php $inboxcc = 'Title'; ?>
      <script type="text/javascript">
      setInterval(function() {
          document.title = "<?php echo $inboxcc; ?>";
      }, 3000);
      </script>
      

      产生输出:

      <script type="text/javascript">
      setInterval(function() {
          document.title = "Title";
      }, 3000);
      </script>
      

      这是您的浏览器看到的。就是这样。

      【讨论】:

      • 这很有意义。认为我真的相信它会起作用似乎很愚蠢
      【解决方案4】:

      JavaScript 中的 PHP 块不能自己更新信息。您需要使用 AJAX、隐藏 iframe 或其他方式更新标题。此时您的代码将 &lt;title&gt; 元素更改为相同的值。

      【讨论】:

        【解决方案5】:

        您的 php 代码无法在 javascript 中解释,因此将值隐藏在隐藏的输入中:

        <input type="hidden" id="inboxcc" value="<?php echo $inboxcc; ?>">
        

        现在您可以在 javascript 中调用该值:

        setInterval(function() {
                document.title = document.getElementById('inboxcc').value;
            }, 3000);
        

        【讨论】:

        • 如果这个 JavaScript 在 HTML 中的 &lt;script&gt; 标签内,为什么不呢?
        • 与原始代码相比,这将如何工作? HTML 仍然是静态的。
        • 你是对的,如果输入没有刷新,值不会被刷新......抱歉没有回答所需需求的回复......
        猜你喜欢
        • 1970-01-01
        • 2016-02-09
        • 1970-01-01
        • 2012-11-11
        • 2012-12-07
        • 2020-07-27
        • 1970-01-01
        • 2012-02-06
        • 1970-01-01
        相关资源
        最近更新 更多