使用setInterval()刷新我的php页面的一部分

时间:2015-03-18 10:44:25

标签: javascript php jquery html ajax

我的PHP页面上有一个值,我想用setInterval()每秒刷新一次。

所以我实际上知道如何用html等刷新值。但是现在我想用php值做同样的事情。这是我的代码:

<script>
setInterval(function()
    {

<?php
$urlMachineOnline = 'http://192.168.0.150/awp/Shredder/PLCfiles/MachineOnline.html';

// get content
$contentMachineOnline = file_get_contents($urlMachineOnline);

//remove first 2 characters
$truncateMachineOnline = substr($contentMachineOnline, 2);

//remove last 5 characters
$MachineActivityMS = substr($truncateMachineOnline, 0, -5);

//Set the value to seconds
$MachineActivityS = floor($MachineActivityMS /1000);

$formatMachineActive = 'H:i:s'; 

$TimeMachineActive = gmdate($formatMachineActive, $MachineActivityS);

?>

},1000);

</script>

Ofc这个没有用,因为JS和php并不是很好。 在我的表格中,我只是简单地说:

<table>
    <tr>
        <td>Activity:</td>
        <td><p id='MachineActivity'></p><?php echo $TimeMachineActive; ?></td>
    </tr>
</table>

现在的问题是,当我按f5时,它只会令人耳目一新。但现在我想要autorefresh。我知道setInterval()为html工作。可以为php代码完成这个吗?

6 个答案:

答案 0 :(得分:2)

这应该适合你:

JS代码:

<script>
setInterval(function()
{

    $.ajax({

    url: 'value-generation.php',
    type: 'get',
    success: function(response){

    $("#MachineActivity").html(response)
    },

    });

        },1000);

    </script>

value-generation.php代码:

<?php
$urlMachineOnline = 'http://192.168.0.150/awp/Shredder/PLCfiles/MachineOnline.html';

// get content
$contentMachineOnline = file_get_contents($urlMachineOnline);

//remove first 2 characters
$truncateMachineOnline = substr($contentMachineOnline, 2);

//remove last 5 characters
$MachineActivityMS = substr($truncateMachineOnline, 0, -5);

//Set the value to seconds
$MachineActivityS = floor($MachineActivityMS /1000);

$formatMachineActive = 'H:i:s'; 

$TimeMachineActive = gmdate($formatMachineActive, $MachineActivityS);

echo $TimeMachineActive;

?>

答案 1 :(得分:1)

这是将php值转换为javascript

的方法
<script>
setInterval(function(){
<?php
$urlMachineOnline = 'http://192.168.0.150/awp/Shredder/PLCfiles/MachineOnline.html';
// get content
$contentMachineOnline = file_get_contents($urlMachineOnline);
//remove first 2 characters
$truncateMachineOnline = substr($contentMachineOnline, 2);
//remove last 5 characters
$MachineActivityMS = substr($truncateMachineOnline, 0, -5);
//Set the value to seconds
$MachineActivityS = floor($MachineActivityMS /1000);
$formatMachineActive = 'H:i:s'; 
$TimeMachineActive = gmdate($formatMachineActive, $MachineActivityS);
?>
var n_val = "<?php echo $TimeMachineActive; ?>";
    console.log(n_val);
},1000);

</script>

更改控制台并根据您的需要进行操作。


但是这会使装载时间更长吗?您每秒呼叫一个远程页面并检查?

答案 2 :(得分:0)

刷新时,PHP会再次返回整个页面,并且无法刷新页面的某些部分。因此,如果您只想刷新页面的一部分,则需要使用iframe。

<body>
  <h1>This is my main PHP page</h1>
  <iframe src="[url-to-another-php-page-with-only-the-timer]"></iframe>
</body>

然后你将不得不用一个单独的php页面只用定时器值,并用一个元标记提供html - 这个元标记将进行刷新。此票证中详细列出了元标记:PHP - auto refreshing page

答案 3 :(得分:0)

您需要定义setInterval函数。

function setInterval($f, $milliseconds)
{
    $seconds=(int)$milliseconds/1000;
    while(true)
    {
        $f();
        sleep($seconds);
    }
}

现在调用你的设置间隔函数,它应该可以正常工作。

答案 4 :(得分:0)

如您所知,PHP文件将使服务器在调用其URI时生成页面。 您使用脚本的方式不会使服务器“重新生成”页面并更新值。

假设这样,您可以:

  • 外化你的setInterval函数中的php代码(例如:update_time_machine.php)

  • 召回外部化的PHP资源(使用IFrame或请求)

  • 使用PHP脚本输出通过Jquery / JAVASCRIPT更新您的页面。

编辑:Mihali的回答听起来最干净。

答案 5 :(得分:0)

我确定这对您有用

 <script>
     setTimeout(function(){
         location.reload();
      },1000); // 1000 milliseconds means 1 seconds.
 </script>