我有一个ajax调用,如下面的asp.net应用程序
$.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数据,这个ajax调用经常被调用,因为它包含在母版页中,因此它被缓存。服务器中的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。 我做得对吗?还是有更好的方法来实现它。
答案 0 :(得分:1)
只需添加随机令牌即可创建唯一的未缓存uri:
url: plugin.settings.resourceurl + plugin.settings.datap + '?t=' + Math.floor(Math.random() * 10000),
分别为:
url:'http://localhost/api'+ '?t=' + Math.floor(Math.random() * 10000),
另外,您可能希望在ajax设置中设置cache: false
:)
答案 1 :(得分:0)
304。缓存是特定于url的,因此随机回调会不断更改url