我正在编写一个使用[我相信的] AJAX的网页,以便可以将数据输入文本字段,单击“确定”框,将数据保存到数据库,然后重新加载该区域包含文本字段和“确定”按钮以及基于输入数据的一些其他数据。现在可以正常工作,这个过程在第一个条目上运行正常,但是如果你再次尝试输入信息,它的行为就像再次输入原始值一样:
示例:
用户输入:5
页面的行为就好像输入是:5
用户输入:4
页面的行为就好像输入是:5
用户输入:3
页面的行为就像输入:5
当页面最初加载时,该区域看起来像这样(是的,它是空白的。我调用在页面初始加载结束时加载它的代码):
echo "<table>";
// ...Other stuff which I don't think is involved in the problem, though I've been wrong before...
echo "<tr>";
echo "<td>";
echo "<div id=\"measurements\">";
// Filled by javascript functions below
echo "</div>";
echo "</td>";
echo "</tr>";
echo "</table>";
以下javascript函数可用,并在页面加载时调用:
function measurementEntered(pid, vid, oid, varn, dat) {
// Create XMLHttpRequest object
var xmlhttp;
if(window.XMLHttpRequest) {
xmlhttp = new XMLHttpRequest();
}
else {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.open("GET", "ajax_measurements_update.php?varn="+varn+"&pid="+pid+"&vid="+vid+"&oid="+oid+"&dat"+dat+"&user="+user, false);
xmlhttp.send();
document.getElementById("measurements").innerHTML=xmlhttp.responseText;
}
并且ajax_measurements_update.php页面包含以下代码来输入数据并刷新区域(还有一些代码可以向该区域添加更多信息,但我认为这不会导致问题。如果您怀疑它可能会,我可以发布更多信息):
echo "<input type=\"text\" id=\"Select4\" name=\"dat\" size=\"20\" />";
和
echo "<button type=\"button\" onclick=\"measurementEntered($pid, $vid, $oid, $varn, Select4.value);\" />OK</button>";
因此,在单击“确定”按钮时,应从“Select4”文本字段中提取数据并调用measurementEntered函数。然后,measuredEntered函数应使用新的“OK”按钮刷新该区域,准备从新的“Select4”文本字段中提取数据。但是,再次单击它时,将使用Select4中的原始值调用measurementEntered。有什么想法吗?
感谢。
答案 0 :(得分:5)
您的网络浏览器正在缓存连续的请求。这就是为什么你在第一个请求中得到预期的结果,并且所有连续请求都得到相同的结果。
解决方案1 -
要禁用缓存,请在ajax_measurements_update.php中添加以下标头信息
header("cache-control: no-cache");
解决方案2 -
将您的请求网址更改为以下内容(在最后添加时间参数,以便您的浏览器认为这是一个新网址,因此不会从缓存中加载)
xmlhttp.open("GET", "ajax_measurements_update.php?varn="+varn+"&pid="+pid+"&vid="+vid+"&oid="+oid+"&dat"+dat+"&user="+user+"&temp="+(new Date()).getTime(), false);
解决方案3 -
一个有价值的替代方案是切换到jQuery。在文档就绪函数中添加以下代码以在所有请求中禁用缓存。
$.ajaxSetup ({
// Disable caching of AJAX responses
cache: false
});
答案 1 :(得分:3)
如果您将日期时间附加到您的网址,它将永远不会缓存。
function measurementEntered(pid, vid, oid, varn, dat) {
// Create XMLHttpRequest object
var xmlhttp;
if(window.XMLHttpRequest) {
xmlhttp = new XMLHttpRequest();
}
else {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
var currentTime = new Date();
xmlhttp.open("GET", "ajax_measurements_update.php?varn="+varn+"&pid="+pid+"&vid="+vid+"&oid="+oid+"&dat"+dat+"&user="+user+"&dt="+currentTime.getTime(), false);
xmlhttp.send();
document.getElementById("measurements").innerHTML=xmlhttp.responseText;
}
答案 2 :(得分:2)
结果可能会被缓存。尝试为AJAX请求禁用缓存,或在AJAX查询中附加唯一的GET值(例如时间戳)。
答案 3 :(得分:2)
您还可以将标头添加到您不希望浏览器缓存的任何PHP文件中:
header('Cache-Control: no-cache, must-revalidate');
指示浏览器不要缓存
header('Expires: Tue, 1 Jan 2010 12:00:00 GMT');
还会在过去添加到期日期
答案 4 :(得分:0)
听起来像是不正确的SQL给我。您使用什么代码从数据库中请求数据?