ajax onclick command pulling outdated data ajax 点击命令拉取过时的数据
ajax onclick command pulling outdated data ajax 点击命令拉取过时的数据
我正在编写一个网页,使用[我认为是] AJAX,以便用户可以在文本框中输入数据,点击“确定”按钮,将数据保存到数据库,并重新加载包含文本框和“确定”按钮的区域,同时根据输入的数据加载其他一些数据。目前,该过程在第一次输入时运行正常,但如果尝试再次输入信息,它会表现得好像原始值再次被输入了:
\n示例: \n用户输入:5
\n页面表现得好像输入是:5
\n用户输入:4
\n页面表现得好像输入是:5
\n用户输入:3
\n页面表现得好像输入是:5 \n当页面初始加载时,该区域看起来是这样的(是的,它是空的。我在页面初始加载结束时调用加载它的代码): \n
echo "
"; echo ""; // 由下面的JavaScript函数填充 echo ""; echo " | "; echo "
\n以下JavaScript函数可用,并在页面加载时调用:\n
function measurementEntered(pid, vid, oid, varn, dat) { // 创建XMLHttpRequest对象 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; }
\najax_measurements_update.php页面包含以下代码,用于输入数据并刷新该区域(还有一些代码用于向该区域添加更多信息,但我认为它不会引起问题。如果你怀疑它可能会引起问题,我可以发布更多代码):\n
echo "";
\n和 \n
echo "确定";
\n因此,当点击“确定”按钮时,应该从“Select4”文本框中获取数据并调用measurementEntered函数。measurementEntered函数应该使用新的“Select4”文本框刷新该区域,以准备从中获取数据的新“确定”按钮。然而,当你再次点击它时,measurementEntered被调用时使用的是Select4的原始值。有什么想法吗?\n谢谢。
问题:ajax onclick命令拉取过期数据的原因及解决方法
问题描述:
当使用ajax onclick命令拉取数据时,可能会出现结果被缓存的情况。
解决方法:
1. 禁用缓存:尝试为ajax请求禁用缓存,可以通过在AJAX查询中附加唯一的GET值(比如时间戳)来实现。例如:
$.ajax({
url: "your-url",
data: {timestamp: Date.now()}, // 添加时间戳作为唯一GET值
cache: false, // 禁用缓存
success: function(response) {
// 处理响应数据
}
});
2. 添加随机数:可以通过在每个ajax请求中添加随机数作为GET参数来确保每次请求都是唯一的。例如:
$.ajax({
url: "your-url",
data: {random: Math.random()}, // 添加随机数作为唯一GET值
success: function(response) {
// 处理响应数据
}
});
通过禁用缓存或添加唯一GET值,可以确保每次ajax请求都是独立的,避免获取过期的数据。
问题的出现原因是将时间附加到URL上可以防止缓存。解决方法是在URL中附加时间戳,使每次请求都是唯一的,从而避免使用过时的数据。
以下是整理后的文章:
如果您将日期时间附加到URL上,它将不会被缓存。下面的代码是一个将测量数据输入到数据库中的函数。在此函数中,使用了XMLHttpRequest对象来发送请求,并将响应的内容显示在页面上。
function measurementEntered(pid, vid, oid, varn, dat) { // 创建XMLHttpRequest对象 var xmlhttp; if(window.XMLHttpRequest) { xmlhttp = new XMLHttpRequest(); } else { xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); } var currentTime = new Date(); // 在URL中附加时间戳 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; }
以上代码中的问题是每次请求都附加了时间戳,这样确保了每次请求都是唯一的,从而避免了使用过时的数据。这种做法可以有效地解决数据过时的问题。
问题:ajax onclick命令拉取过时数据的出现原因及解决方法
问题的出现原因是连续的请求被浏览器缓存,导致第一个请求和后续所有请求都得到相同的结果。
解决方法1:
在ajax_measurements_update.php文件中添加以下头信息来禁用缓存。
header("cache-control: no-cache");
解决方法2:
将请求的URL更改为以下形式(在末尾添加一个时间参数,使浏览器认为这是一个新的URL,因此不会从缓存中加载)。
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 });
链接:Stop jQuery .load response from being cached
不同的Select4.value值导致不同的GET请求,因此它们不会被缓存。或者我的观点有误?
我仍然不确定是否是缓存的问题,因为我尝试了在ajax_measurements_update.php中添加头信息和添加时间戳,但都没有起作用。不过,我接受了这个答案,因为它建议切换到jQuery,我也这样做了,问题得到了解决。
你能告诉我你使用的是哪个版本的Internet Explorer吗?
我不是。我使用的是Firefox。我在我的代码中是否有什么通常只用于IE的东西?
是的,那个Microsoft.XMLHTTP看起来像是IE的编码风格,但jQuery是跨浏览器兼容的Web应用程序的理想解决方案。