Javascript 浏览器在页面重新加载时未调用新Ajax请求
我在Ajax请求中设置了不存储缓存的属性。我还将查询字符串作为参数添加到URL中,以调用新的Ajax请求。但每当我刷新页面时,我都会在页面上看到旧内容。我总是要硬刷新页面才能看到更新的内容。 请求头被正确地传递到浏览器,这是我在ajax属性中设置的。但是为什么我总是要努力刷新才能得到更新的内容呢。如何在页面刷新时加载新内容。我已经在下面粘贴了我的Ajax 设置属性的AJAX方法Javascript 浏览器在页面重新加载时未调用新Ajax请求,javascript,jquery,ajax,Javascript,Jquery,Ajax,我在Ajax请求中设置了不存储缓存的属性。我还将查询字符串作为参数添加到URL中,以调用新的Ajax请求。但每当我刷新页面时,我都会在页面上看到旧内容。我总是要硬刷新页面才能看到更新的内容。 请求头被正确地传递到浏览器,这是我在ajax属性中设置的。但是为什么我总是要努力刷新才能得到更新的内容呢。如何在页面刷新时加载新内容。我已经在下面粘贴了我的Ajax 设置属性的AJAX方法 $.ajaxPrefilter(function (options, originalOptions, jqX
$.ajaxPrefilter(function (options, originalOptions, jqXHR) {
if (options.type == 'POST') {
options.url += '?' + Date.now();
}
});
$.ajaxSetup({
cache: false,
headers: {
'Cache-Control':'max-age=0, public'
},
});
我的JQuery
$.ajax({
url: "/Configuration/TestPlan/GetUserList",
type: 'POST',
cache: false,
dataType: 'json',
// async :false,
beforeSend: function () {
//call pageloader
showImageLoader();
},
data:jsonString,
contentType: "application/json; charset=utf-8",
success: function (data) {
From—“如果设置为false,将强制浏览器不缓存请求的页面。注意:将缓存设置为false将仅适用于HEAD和GET请求”——
所以我不认为缓存选项做了你认为的事情。因为这是一篇博文,所以唯一会影响缓存破坏的是您的一个小片段:
$.ajaxPrefilter(function (options, originalOptions, jqXHR) {
if (options.type == 'POST') {
options.url += '?' + Date.now();
}
});
每次它发出请求时——该页面实际上正在被缓存。它只会创建一个新的Date.now()-然后在您创建一个新的Date.now()之前一直保存该url
因此,当您注释掉它时,调用的最后一个页面/数据被缓存,现在您注释掉了更新cachebuster的唯一内容
也许只需将缓存破坏直接应用于原始调用:
$.ajax({
url: "/Configuration/TestPlan/GetUserList?" + Date.now(),
type: 'POST',
cache: false,
dataType: 'json',
// async :false,
beforeSend: function () {
//call pageloader
showImageLoader();
},
data:jsonString,
contentType: "application/json; charset=utf-8",
success: function (data) {
如果您查看dev工具中的network选项卡-doyou:1。查看请求末尾的cachebuster,它是否每次都不同(由Date.now()生成的数字)?2.正在请求的数据-如果预览正在返回的数据(在“网络”选项卡中),它看起来是否正确?)Hi@RacilHilan。我的成功方法中有很多代码和逻辑。我不能粘贴所有的东西here@Kyle:是每次我刷新页面时数字都会更改。但每当我注释掉date.now并刷新页面时,“网络”选项卡仍会显示方法名称后面附加的date.now编号。是缓存的问题,还是我误解了,我的数据没有从缓存中返回?@RacilHilan我想你不明白这个问题。问题不在于我返回的数据不正确。问题是缓存,AJAX具有预定义的属性。我想验证我的缓存方法是否正确。好的,将
cache
属性设置为false
很好。您不需要在$内多次执行。ajax
只会影响该调用,而在$内。ajaxSetup
会影响该页面上的所有调用。就这些。如果它真的只是关于缓存,那么你的问题不在你发布的代码中。试着看看哪一点不尊重兑现请求。所有这些都是不必要的。您在回答的开头引用了jQuery文档,这很好,但为什么要到此为止?完成以下句子:其他类型的请求不需要该参数<代码>POST请求不能由任何点缓存,因此OP需要调查哪个点有故障。至于您所谓的“缓存破坏”(我喜欢这个名称,这是正式的吗?),最好像jQuery那样将它分配给一个参数'?\u='+Date.now()
。但同样,这是不必要的,因为jQuery已经在需要时这样做了。是的,“缓存破坏”是非常正式的,只要给它一个ol“google”,你就会明白我的意思:)嗨@Kyle,我正在做的是通过给url一个新的日期时间来添加一个唯一的标识符。但即使我注释掉日期时间。“网络”选项卡仍然在URL中显示参数,直到我硬刷新它为止。