从json文件加载数据时清除Highchart中的缓存

时间:2014-09-16 07:37:36

标签: javascript jquery json highcharts

我正在做以下事情:

  1. 使用python django中的一些逻辑创建一个json文件
  2. 此json文件现在由高图表js代码用于呈现饼图
  3. highchart js的代码如下:

    //高图表json饼图

    $(document).ready(function() {
    console.log("hi from high chart from json PIE")
    
      $.getJSON("{% static 'money/data/highchartpie.json' %}", function(json) {
        console.log("haha i have read the json")
       $('#containerHighChartJSONPie').highcharts({
        chart: {
            plotBackgroundColor: null,
            plotBorderWidth: 1,//null,
            plotShadow: false
        },
        title: {
            text: 'Expenses per Types of Expenditures'
        },
        tooltip: {
            pointFormat: '{point.name}: <b>{point.percentage:.1f}%</b>'
        },
        plotOptions: {
            pie: {
                allowPointSelect: true,
                cursor: 'pointer',
                dataLabels: {
                    enabled: true,
                    format: '<b>{point.name}</b>: {point.percentage:.1f} %',
                    style: {
                        color: (Highcharts.theme && Highcharts.theme.contrastTextColor) || 'black'
                    }
                }
            }
        },
        series: [{
            type: 'pie',
            name: 'Type of Expenditure',
            data: json
        }]
    });
    });
    
    });
    

    json中的数据是: [[&#34;杂货&#34;,50.0],[&#34;杂项&#34;,30.0]]

    问题 下面根据需要生成好的饼图,如果更改任何数据,图表也会更改,但有时图表剂量会显示其中的更新数据。我试过了:

    1. 从其他浏览器运行它 - 它显示带有新值的更新图表
    2. 清除缓存并在同一浏览器中再次尝试,现在它显示更新的代码
    3. 所以它似乎是一个缓存问题,但有没有办法在高清代码中解决这个问题?

1 个答案:

答案 0 :(得分:3)

您可以通过调用以下内容将缓存设置为false,它将针对您的所有请求禁用:

$(document).ready(function() {
  $.ajaxSetup({ cache: false });
});

请参阅此问题:How to set cache false for getJSON in JQuery?

要获得更精确的缓存处理,请将getJSON更改为ajax jquery调用,将datatype设置为JSON:事实上,$.getJSON是以下快捷方式:

$.ajax({
    dataType: "json",
    url: url,
    data: data,
    success: success
});

因此,如果您想在请求中设置cache: false,则应该以这种方式添加:

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