为什么在我刷新之前不会加载谷歌图表

我一直在使用谷歌图表一段时间没有任何问题。 我的代码根本没有改变,但最近我的图表还没有加载,直到我刷新浏览器几次,等待,然后再次刷新。 当图表加载时它们很好。 我可以去其他页面然后回来,他们立即加载。 我会说现在我在我的html之后而不是之前加载我的jquery,这会加倍确保页面在jquery之前加载。

我正在使用mozilla firefox。 如果我不关闭浏览器一切都很好,但只要我关闭浏览器并返回页面,图表就不会立即显示。 这让我觉得一旦它在缓存中一切都很好,但我认为从谷歌图表中获取loader.js存在问题。

我使用以下内容包含谷歌图表

 

然后我包括我的jquery

  

最初我没有把我的代码放在文档中,但我最近添加了这个,以确保在运行我的代码之前已经加载了页面。

然后这是我的charts.js jQuery代码加载图表(我显然包括jquery,但这里没有显示)

 $(document).ready(function(){ $.post("database/home/ajax/ajax.php", {CODE:"loadCharts"}, function(data){ google.charts.load('current', { callback: function () { myData1=data.chart.splice(0,data.salesCount); myData2=data.chart.splice(0,data.expensesCount); myData3=data.chart.splice(0,data.hrcostCount); drawBarChart('total_sales_chart',myData1,"Total Sales Last Six Months","Sales"); drawBarChart('total_expenses_chart',myData2,"Total Expenses Last Six Months","Expenses"); drawBarChart('total_hr_chart',myData3,"Total HR Costs Last Six Months","HR Costs"); function drawBarChart(id,myData,title,axis) { var data = new google.visualization.DataTable(); data.addColumn('date', 'Month'); data.addColumn('number', axis); var dataLength= myData.length; var rows = new Array(); for(var i = 0; i < dataLength ; i++) { rows.push([new Date(myData[i][0]),0]); } data.addRows(rows); var options = { title: title, hAxis: { title: axis }, vAxis: { title: 'Month' }, backgroundColor: { fill:'transparent' }, legend: {position: 'none'}, 'animation':{duration:1000,easing:'out'} }; var chart = new google.visualization.BarChart(document.getElementById(id)); chart.draw(data, options); setTimeout(function(){ for(i=0;i<dataLength;i++){ data.setValue(i,1,myData[i][1]); } chart.draw(data, options); },1000); } }, packages: ['corechart'] }); },"JSON"); }); 

post是我从后端获取数据的地方。 我知道我的post没问题,因为它立即回来,但我确实知道回调后的代码每次都没有运行。 这意味着由于某些原因我不认为loader.js正在正确下载。

一旦图表显示一切都很好。 任何人都可以告诉我为什么在页面首次加载时图表不会加载?

如果你想知道拼接,我可以告诉你。 我将所有数据带回一个arrays,然后将它们分成3个arrays,所以我只需要为3个图表制作一个post。 然而,我的arrays没有任何问题,只是谷歌图表回调。

google的callback可用于代替 – > $(document).ready

尝试先调用google.load

如果callback触发, $.post工作,
那么绘制图表应该没有延迟

尝试重组,如下面的代码片段所示……


 google.charts.load('current', { packages: ['corechart'], callback: function () { $.post("database/home/ajax/ajax.php", {CODE:"loadCharts"}, function(data){ myData1=data.chart.splice(0,data.salesCount); myData2=data.chart.splice(0,data.expensesCount); myData3=data.chart.splice(0,data.hrcostCount); drawBarChart('total_sales_chart',myData1,"Total Sales Last Six Months","Sales"); drawBarChart('total_expenses_chart',myData2,"Total Expenses Last Six Months","Expenses"); drawBarChart('total_hr_chart',myData3,"Total HR Costs Last Six Months","HR Costs"); function drawBarChart(id,myData,title,axis) { var data = new google.visualization.DataTable(); data.addColumn('date', 'Month'); data.addColumn('number', axis); var dataLength= myData.length; var rows = new Array(); for(var i = 0; i < dataLength ; i++) { rows.push([new Date(myData[i][0]),0]); } data.addRows(rows); var options = { title: title, hAxis: { title: axis }, vAxis: { title: 'Month' }, backgroundColor: { fill:'transparent' }, legend: {position: 'none'}, 'animation':{duration:1000,easing:'out'} }; var chart = new google.visualization.BarChart(document.getElementById(id)); chart.draw(data, options); setTimeout(function(){ for(i=0;i 

答案是这样的。 即使我禁用了我的插件弹出窗口阻止程序,看看是否会导致问题,但我还是不知道。 Mozilla Firefox有一个内置的弹出窗口拦截器。 在工具/选项/内容下。 您需要取消阻止块弹出窗口,然后谷歌图表将加载到Mozilla中。 这已经困扰了我几个星期,我甚至不知道它有一个内置的弹出窗口拦截器。