我一般来说对术语和编码还是比较陌生的,但是我尝试精简我的代码,尽管它可能仍然有多余之处。预先感谢您的理解。
我正在使用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
,但这些似乎没有任何影响。
我已经四处搜寻,似乎无法找出这里发生了什么。感谢您提供的指导。
答案 0 :(得分:0)
首先,function calculateFunction(){...}
方法可以由浏览器缓存。
其次,确保响应是json类型
GET
答案 1 :(得分:0)
谢谢。我最终使用了以下内容:
RefreshingClient
我以前尝试过使用它,但是由于某种原因它不起作用,不确定原因。但是现在正在工作!谢谢。