ajax onclick command pulling outdated data ajax 点击命令拉取过时的数据

14 浏览
0 Comments

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 "";  
echo "";  
echo "";  
echo "
"; echo ""; // 由下面的JavaScript函数填充 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谢谢。

0
0 Comments

问题: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请求都是独立的,避免获取过期的数据。

0
0 Comments

问题的出现原因是将时间附加到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;
}

以上代码中的问题是每次请求都附加了时间戳,这样确保了每次请求都是唯一的,从而避免了使用过时的数据。这种做法可以有效地解决数据过时的问题。

0
0 Comments

问题: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应用程序的理想解决方案。

0