除非我刷新,否则写入文本文件不会更新

时间:2015-02-12 17:22:18

标签: php html mysql

我试图允许用户下载带有坐标信息的xml文件。我使用以下命令创建下载按钮:

<a download href='XML_Data.xml'><input type='button' value='XML Data' onclick='loadXML()'></a>

下面是我的loadXML()函数:

function loadXML()
{
    <?php
        //clear the file
        file_put_contents("XML_Data.xml", "");

        $handle = fopen("XML_Data.xml", "w+");
        fwrite($handle, "<ANNOTATIONS>\r\n");

        //markers
        $sql = "SELECT coords, color, annot_type FROM cbmarker.annot_test WHERE
        project_id='$pid' 
        AND userid=" . $_SESSION['Id'] .
        " AND image=\"" . $pic .
        "\" AND annot_type='marker'
        ORDER BY id ASC";
        $result = mysql_query($sql);

        while($row = mysql_fetch_array($result, MYSQL_ASSOC))
        {           
            $markerX = $row['coords'];
            $row = mysql_fetch_array($result, MYSQL_ASSOC);
            $markerY = $row['coords'];

            fwrite($handle, "  <annotation annot_type='marker' color='" . $row['color'] . "' X='" . $markerX . "' Y='" . $markerY . "' />\r\n");
        } 

        fwrite($handle, "</ANNOTATIONS>\r\n");
        fclose($handle);
    ?>

当我向查询应该抓取的数据库添加其他条目时,文本文件不包含它们。但是,当我刷新页面时,一切正常。有没有人知道为什么文本文件在我刷新之后才会更新,即使数据库在我刷新之前确实更新了?

由于

1 个答案:

答案 0 :(得分:0)

以下是发生的事情:

  1. 您请求包含显示的JavaScript代码的页面
  2. 由于某些页面包含PHP代码,因此该PHP代码在服务器上运行 ,并将返回给浏览器呈现的HTML,包括JavaScript。
  3. 然后在浏览器中呈现呈现的HTML。您作为页面的一部分下载的JavaScript不会更改,因为PHP代码不会在浏览器中重新执行。它仅用于呈现现在在浏览器中的HTML + JavaScript。
  4. 当您刷新页面时,Web浏览器再次查询服务器,并通过再次运行PHP在服务器上生成新JavaScript
  5. 如果您希望页面在不完全刷新的情况下自动显示新项目,您可以使用计时器定期向服务器发出Ajax查询以查找数据更新。