【问题标题】:Browser JQUERY data cache IE7浏览器 JQUERY 数据缓存 IE7
【发布时间】:2011-07-28 08:55:40
【问题描述】:

谁能阐明以下现象?

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

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

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

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

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

非常感谢任何cmets

J

下面需要的代码:

    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);
    }

【问题讨论】:

标签: jquery


【解决方案1】:

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

你可以这样做:

 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;

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-23
      • 2012-04-09
      • 2011-04-22
      • 1970-01-01
      相关资源
      最近更新 更多