Ajax无法获取最新版本的JSON文件

时间:2018-08-02 21:34:39

标签: javascript php jquery json ajax

我一般来说对术语和编码还是比较陌生的,但是我尝试精简我的代码,尽管它可能仍然有多余之处。预先感谢您的理解。

我正在使用ajax和php脚本将一些数据写入服务器上名为data.json的文件中。该脚本运行良好,打开json文件显示该文件确实已使用数据更新。 json文件仅包含一个对象数组。

这是执行此操作的代码:

function writeData() {
    $.ajax({
        type : "POST",
        url : "save.php",
        async : true, 
        data : {
        json : JSON.stringify(dataToWrite)
        }
    });

document.getElementById('success-box').innerHTML = "Data successfully written.";
};

...和PHP:

<?php
   $json = $_POST['json'];
   $file = fopen('data.json','w+');
   fwrite($file, $json);
   fclose($file);
?>

我遇到的问题是:用户可以导航到单独的HTML页面,并且可以单击按钮以一种格式正确的方式查看json文件中的数据。这是通过另一个读取数据的ajax脚本完成的。后者的ajax脚本似乎无法“看到”新近更新的json文件。相反,它将在使用第一个ajax脚本更新文件之前加载文件的旧版本。我确定第二个Ajax脚本是在上述writeData()完成之后运行的,因为它实际上完全在一个单独的HTML页面上,然后在用户单击按钮之后加载。

这是第二个从data.json文件读取数据的ajax脚本(位于另一个单独的HTML页面上):

$.ajax({
        type : "GET",
        url : "http://eslquiz.net/ell_errors/data.json",
        async : true,
        dataType : 'json',
        success : function(response) {

          data = response;

          document.getElementById('main').innerHTML = `
                <div id='top-stuff'>
                    <button onClick='viewData()'>Reset Filter</button>
                    <button onclick="print2()">Print Worksheet</button>
                </div>
                <br>
                <div id='left-column' class='column'></div>
                <div id='right-column' class='column'></div>
          `;

          leftColumn = document.getElementById('left-column');
          rightColumn = document.getElementById('right-column');

          leftColumn.innerHTML = "<b>Sentences:</b> <br><br>";
          rightColumn.innerHTML = "<b>Errors:</b> <br><br>";

          //add the sentences and their errorTypes:
          for (i=0; i<data.length; i++) {

            var senBox = document.createElement('div');
            senBox.className = 'box';
            senBox.setAttribute('id', 'sen' + i)
            senBox.innerHTML += data[i].text;

            var errBox = document.createElement('div');
            errBox.className = 'box';
            errBox.setAttribute('id', 'err' + i)
            errBox.innerHTML += data[i].errorType;

            leftColumn.appendChild(senBox);
            rightColumn.appendChild(errBox);

          }

        }

    });

所有这些文件都托管在One.com上的同一目录中。

奇怪的是,当我手动打开data.json文件并以任何方式(例如,删除所有内容)编辑其内容时,下次进行ajax调用时,它将读取我刚刚手动更新的版本。这使我认为与One.com服务器刷新本身有关吗?

我尝试在同步/异步之间调整Ajax,并使用cache: false,但这些似乎没有任何影响。

我已经四处搜寻,似乎无法找出这里发生了什么。感谢您提供的指导。

2 个答案:

答案 0 :(得分:0)

首先,function calculateFunction(){...} 方法可以由浏览器缓存。 其次,确保响应是json类型

GET

答案 1 :(得分:0)

谢谢。我最终使用了以下内容:

RefreshingClient

我以前尝试过使用它,但是由于某种原因它不起作用,不确定原因。但是现在正在工作!谢谢。