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 我这样做是正确的?或者有更好的方法来实现它。

+0

你知道你正在设置'cache:true',对吧?试图改变它为'假'? – 2015-02-09 15:33:15

+0

side-note,你的ajax请求中的以下选项被忽略,因为这是一个jsonp请求:'type,contentType,async,error' – 2015-02-09 15:35:48

+0

感谢所有答复,@RoryMcCrossan是的,我想缓存,我已经提到它在问题中。我希望缓存可用,除非JSONP文件中有更改,缓存超时设置为1周。 – prvn 2015-02-10 03:48:43

只需添加一个随机令牌创建一个独特的非缓存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设置:)

+0

如果我给出唯一的uri,并且如果JSONP文件没有改变,那么JSONP文件将每次从服务器拉出来,这会扼杀服务器,所以我希望脚本只有在更改时才能获取JSONP文件,获取缓存文件如果不是。 – prvn 2015-02-10 05:54:48

+0

然后在服务器端逻辑中实现这个逻辑 – Alex 2015-02-10 10:13:13

在这种情况下304将不会被返回,因为您正在使用随机回拨。缓存是网址特定的,因此随机回调不断更改网址