Jquery:如何清除缓存或从ajax调用获取更新的JSONP

时间:2015-02-09 15:30:40

标签: jquery ajax caching

我有一个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。 我做得对吗?还是有更好的方法来实现它。

2 个答案:

答案 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