浏览器JQUERY数据缓存IE7

时间:2011-07-28 08:55:40

标签: jquery

有人能否对以下现象有所了解?

我有一个在目标平台IE7上运行的ASP.NET MVC应用程序

如果我在数据库中输入记录,则导航到包含HighChart图的ASPX页面,不会显示输入的数据。我必须关闭浏览器并重新加载应用程序以使数据显示在图表中。

我在调试模式下运行应用程序,代码没有命中控制器中的断点。它好像客户端JQUERY代码认为没有变化并且正在缓存。控制器甚至不会启动,但应用程序的运行方式与旧数据一样。

当我重新加载应用程序(停止并启动)时,控制器会激活,我可以调试并且最新的数据进入

疯狂的东西,必须有一个设置可能是web.config或某个地方,以确保客户端JSON调用总是转到控制器而不是缓存

任何评论都非常感谢

Ĵ

如果需要下面的代码:

    function CreateChart1(surl) {

        // Code block for fetching Array as jsonResult (js)
        var url = $("#AbsolutePath").val() + "Incident.mvc/GetChartData_IncidentsBySiteStatus/" + surl;

        var chart;
        $.getJSON(url, null, function(data) {

            var result = [];
            jQuery.each(data, function(i, val) {
                result[i] = [val.Site, parseInt(val.Count)];
            });

            chart = new Highcharts.Chart({
                chart: {
                    renderTo: 'chart1',
                    plotBackgroundColor: null,
                    plotBorderWidth: null,
                    plotShadow: false
                },
                title: {
                    text: 'Number of Environmental Incidents by Site Status'
                },
                tooltip: {
                    formatter: function() {
                    return '<b>' + this.point.name + '</b>: ' + this.y + ' (' + Math.round(this.percentage) + '%)';
                    }
                },
                plotOptions: {
                    pie: {
                        allowPointSelect: true,
                        cursor: 'pointer',
                        dataLabels: {
                            enabled: true
                        },
                        showInLegend: false
                    }
                },
                exporting: {
                    enabled: true
                },
                series: [{
                    type: 'pie',
                    name: 'Incidents by Site Status',
                    data: result 

}]
                });
            });
        };

控制器代码:

    public JsonResult GetChartData_IncidentsBySiteStatus(string SiteTypeId, string searchTextSite, string StartDate, string EndDate)
    {
        if (searchTextSite == null)
            searchTextSite = "";

        DateTime startDate = DateTime.Parse(StartDate);
        DateTime endDate = DateTime.Parse(EndDate);

        IQueryable<Site> sitesQry = _db.Sites;

        if (SiteTypeId != "-1")
            sitesQry = sitesQry.Where(a => a.SiteTypeId.ToString() == SiteTypeId);

        var qry = from i in _db.Incidents
                  join s in sitesQry on i.SiteId equals s.SiteId
                  where s.SiteDescription.Contains(searchTextSite)
                    && (i.Raised >= startDate && i.Raised <= endDate)
                  group s by s.SiteStatus.SiteStatusDescription + "[" + s.SiteTypeId.ToString().Replace("1","ON").Replace("0","OFF") + "]"
                      into grp
                      select new
                      {
                          Site = grp.Key,
                          Count = grp.Count()
                      };

        return Json(qry.ToList()  , JsonRequestBehavior.AllowGet);
    }

2 个答案:

答案 0 :(得分:2)

问题是IE7还缓存了通过AJAX完成的GET请求。我通常会在查询字符串中添加一个随机数,以便不缓存请求。

你可以这样做:

 var noCache = new Date().getTime();
//then add nocache as a paremter to the url
var url = $("#AbsolutePath").val() + "Incident.mvc/GetChartData_IncidentsBySiteStatus/" + surl+"&nocache="+noCache;

答案 1 :(得分:0)

jQuery中的AJAX调用的默认设置(脚本和jsonp除外)是允许缓存。您可以使用ajax方法进行调用,以便指定应禁用缓存:

$.ajax({
  cache: false,
  url: url,
  dataType: 'json',
  success: function(data) {
    ...
  }
});