【问题标题】:Show "loading data" in fusion charts在融合图中显示“加载数据”
【发布时间】:2013-08-14 17:38:58
【问题描述】:

我有一个正在渲染融合图表的 JSP。该图表使用 Spring 来获取它使用 MyBatis 作为 ORM 呈现的数据。当我点击呈现图表的超链接时,页面需要永远加载,因为获取的数据很大。我希望图表在查询运行时在图表中显示“加载数据”栏。 JSP 的其他部分应该是可见的,并且图表在获取数据时应该显示“正在加载”。使用带有 XML 配置的 FUSION 闪存版本。提前致谢。

【问题讨论】:

  • 使用 Flash 版本,无法在图表加载时设置自定义/默认消息。但是,默认消息“正在加载图表。请稍候。”在 JavaScript 模式下渲染图表时发生。此外,如果您想配置自定义图表消息,可以在通过 configure() 使用“PBarLoadingText”或“LoadingText”加载 JavaScript 图表时设置。更多信息请参考here。
  • 这种方法是否允许 JSP 中的其他元素先加载然后渲染图表.. ?

标签: javascript charts fusioncharts


【解决方案1】:

您的页面似乎需要很长时间才能显示,因为要从 ORM 获取大量数据。显示 JSP 页面以及 FusionCharts 正在渲染图表时,会显示“正在加载图表”消息。但在您的情况下,JSP 页面根本没有呈现。

作为解决此问题的方法,尝试将两个进程分开,这样就有两个服务器端页面

  1. 当您单击超链接并显示 JSP 页面时,控制权交给了谁
  2. 在加载 JSP 页面时,调用 AJAX 函数并将请求发送到另一个服务器端页面,该页面检索 FusionCharts 加载所需的数据。收到数据后,图表可以绘制数据。当图表绘制数据时,会显示“加载图表”消息。而且,在您收到数据之前,您可以在 div 中显示自定义消息。

由于 AJAX 会在返回时通知您,因此您可以通过这样做来实现您想要的。

【讨论】:

  • 实际上我已经包含了使用 在主 jsp 中呈现图表的 JSP 页面。关于如何根据要求修改它的任何建议。?
  • 您能否告诉我您是如何在“myChartJsp.jsp”中渲染图表的,即您是尝试在 DIV 中渲染 FusionCharts 还是使用 fc:render 方法渲染图表?如果可能,粘贴代码 sn-p。
  • 我正在使用 Javascript 在
    中呈现它。 var chartRTCNT = new FusionCharts( "${chartsUrl}/ScrollCombi2D.swf?PBarLoadingText", "ChartId", "1040", "320", "0", "0");
  • 由于您在
    中使用 FusionCharts,您可以按照上面建议的方法进行操作。在“myChartJsp.jsp”中创建一个函数(比如loadFusionCharts)并将其称为onload of body。在函数内部,使用 AJAX 调用您的数据提供者页面。当 AJAX 函数返回您的 XML/JSON 数据时,您可以使用 JavaScript 代码来呈现要执行的图表。此外,在数据提供者页面中,请确保使用 PrintWriter 对象将 XML/JSON 数据输出到页面的调用者.
  • 所以我应该在函数中设置 XML 中的数据,然后在正文中渲染图表.. ?
【解决方案2】:

参考下面的代码,确保在数据提供者页面(Servlet)中使用“PrintWriter”对象将XML/JSON数据输出到页面的调用者(loadFusionCharts()函数)

<script language='JavaScript'> //in the head section
/* create AJAX object */
function getXMLObject()
    {
        var xmlHttp = false;
        try {
            xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) {
            try {
                xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e2) {
                xmlHttp = false;
            }
        }
        if (!xmlHttp && typeof XMLHttpRequest != 'undefined') {
            xmlHttp = new XMLHttpRequest();
        }
        return xmlHttp;
    }

var xmlhttp = new getXMLObject();

/*function to be called "onload" of body */
function loadFusionCharts()

{
  if (xmlhttp.readyState == 4 || xmlhttp.readyState == 0)
    {
    var url="someURL";  //URL of data provider page that gets data from database
    xmlhttp.open("POST", url, true);
    xmlhttp.onreadystatechange = handleServerResponse;
    xmlhttp.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
    xmlhttp.send(null);
    }
}
/* gets called when AJAX response comes back after executing the data provider page*/
function handleServerResponse()
    { 
        if (xmlhttp.readyState == 4 && xmlhttp.status == 200)
        {
            var chartData = xmlhttp.responseText;
            if (chartData!="") 
            {
          var myChart = new FusionCharts( "./FusionCharts/ScrollCombi2D.swf","ChartId", "1040", "320", "0", "0");
          myChart.setXMLData(chartData);
          myChart.render("fcDiv");  
            }else{
                document.getElementById('fcDiv').innerHTML="Could not get data to render the chart";
            }
         }
    }

</script>
</head>
<body onload='loadFusionCharts()'>

【讨论】:

  • 顺便问一下,数据提供者页面到底是什么意思?我有一个制作图表的 JSP。在同一页面中有setXMLData 和render 函数。我将页面包含在主JSP 中。你想让我在哪里写这个特定的脚本..?
猜你喜欢
相关资源
最近更新 更多
热门标签