jQuery的:如何清除缓存或者从Ajax调用
问题描述:
我有一个Ajax调用作为一个asp.net应用jQuery的:如何清除缓存或者从Ajax调用
$.ajax({
type: 'GET',
url: plugin.settings.resourceurl + plugin.settings.datap,
async: true,
cache: true,
jsonpCallback: 'headerfooter',
contentType: 'application/javascript',
dataType: 'jsonp',
success: function(retresult) {
// console.log(retresult);
},
error: function(e) {
// console.log(e.message);
}
});
AJAX调用从JSONP文件返回数据的chunck图所示,这阿贾克斯更新JSONP调用经常被调用,因为它包含在母版页中,因此它被缓存。服务器中的JSONP文件将在少数情况下在服务器中进行修改,只有在手动清除浏览器缓存后,JSONP文件中的这一更改才会反映在应用程序中。我希望应用程序反映更新而不删除缓存。
我尝试下面的代码
$.ajax({
type:"GET",
url:'http://localhost/api',
dataType:'json',
cache:true,
ifModified:true,
success:function(data,textStatus,jqXHR){
console.debug(jqXHR.status+':'+textStatus);
console.debug(data); // On repeated request returns `undefined`
}
});
这里jqXHR.status告知用户,如果JSONP文件用200如果没有304修改,但每次我运行代码,它提供了200 我这样做是正确的?或者有更好的方法来实现它。
答
只需添加一个随机令牌创建一个独特的非缓存URI:
url: plugin.settings.resourceurl + plugin.settings.datap + '?t=' + Math.floor(Math.random() * 10000),
分别为:
url:'http://localhost/api'+ '?t=' + Math.floor(Math.random() * 10000),
也,你可能需要设置cache: false
在你的Ajax设置:)
答
在这种情况下304将不会被返回,因为您正在使用随机回拨。缓存是网址特定的,因此随机回调不断更改网址
你知道你正在设置'cache:true',对吧?试图改变它为'假'? – 2015-02-09 15:33:15
side-note,你的ajax请求中的以下选项被忽略,因为这是一个jsonp请求:'type,contentType,async,error' – 2015-02-09 15:35:48
感谢所有答复,@RoryMcCrossan是的,我想缓存,我已经提到它在问题中。我希望缓存可用,除非JSONP文件中有更改,缓存超时设置为1周。 – prvn 2015-02-10 03:48:43