调用函数不会更新数据

时间:2016-09-26 18:57:20

标签: javascript php json

所以我的网站上有PHP代码,它读取一个文件(具有JSON格式),然后将其发送到javascript函数,并将其打印在表格中。这对我来说很好,但是我想再次按下这个按钮以便我得到一个更新的表,文件本身每30分钟更新一次。这是我的代码:

的index.php

<?php
function clean($string){
    return json_decode(rtrim(trim($string),','),true);
}

function getLog(){
    $logLines = file('../../../home/shares/flower_hum/humid.log');
    $entries = array_map("clean",$logLines);
    $finalOutput = ['log'  => $entries];
    $json = json_encode($finalOutput);
    return $json;
}
?>

<html>
    <head>
        <script src="script.js" type="text/javascript"></script>
        <script src="sorttable.js" type="text/javascript"></script>
        <link rel="stylesheet" type="text/css" href="style.css">
        <meta charset="UTF-8">
        <title>title</title>
    </head>
    <body>

        <button type="button" onclick='createTable(<?php getLog(); ?>)'>Generate log</button>
        <br><br>
        <div id="logDiv"></div>
    </body>
</html>

的script.js

function createTable(jsonObject) {
//Removes existing tables if there is any.
var myNode = document.getElementById('logDiv');
    while (myNode.hasChildNodes()) {
            alert("logDiv has nodes, removing them now!")
            myNode.removeChild(myNode.firstChild);
    }

 //...Code that prints table
}

所以如果我按下按钮一次,就会生成一个表,但是如果再次按下它,即使JSON文件已更新,也不会发生任何事情。如果我刷新页面,它会再次运行。我不确定为什么这不起作用,因为我也期望它。对我的php函数getLog()的一个新调用;应该读取文件新的时间并生成一个新的JSON对象。

1 个答案:

答案 0 :(得分:0)

您需要区分服务器端代码和客户端代码。

PHP代码在服务器上运行,它会生成一些输出(例如HTML页面或一些JSON数据),并将其发送到您用来访问该页面的客户端(通常是浏览器)。

在您的方案中,Javascript代码在客户端(在您的浏览器中)运行。当您的浏览器打开页面/ URL时,它向服务器发送请求,服务器运行PHP代码并返回包含Javascript代码的HTML页面,其中包括JSON数据作为createTable()函数的参数。 PHP代码永远不会离开服务器,事实上,您的浏览器和Javascript代码对PHP代码(或任何服务器代码)一无所知。

每次按下按钮时,createTable()功能都会运行并显示页面上的数据,但是这些数据永远不会改变,因为它是&#34;静态&#34;服务器发送到您的浏览器的HTML页面。当您刷新页面时,您向服务器发送新请求并再次运行PHP代码,再次生成页面并可能提供一些新的JSON数据。

为了更好地了解幕后发生的事情,您可以Inspect从服务器获取的HTML,您将了解为什么JSON数据在页面刷新之前永远不会更改。在大多数浏览器中,您可以按F12并打开HTML/DOM/Elements标签来执行此操作。

如果要在不重新加载页面的情况下检索新数据,则必须查看AJAX请求。简单来说,AJAX是一种在不重新加载页面的情况下根据需要检索数据和更新页面的技术。