1

我有一个 ASP.net 应用程序,其中包含一个仪表板界面,该界面由各种数量的面板组成。每个 Panel 都包含一个 HighChart 控件并从不同的数据源加载。一些数据源可能需要一些时间来执行,因此我不想因为一个加载缓慢的数据源而减慢整个页面的执行速度。

我希望页面加载,然后每个面板在数据准备好时出现。

当我使用高图表来显示数据时,我的 jQuery 代码类似于:

 $(document).ready(function () {

        var panelIDList = dashID.Get("panelList");

        for (var i = 0; i < panelIDList.length; i++) {
            addpanel(panelIDList[i]);
        }            
    }); 

    function addpanel(panelID)
    {
        $.ajax({
            type: "POST",
            url: "Data.aspx/GetData",
            data: "{val:'" + panelID + "'}",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (msg) {
                var myObject = eval('(' + msg.d + ')');

                var options = {
                    chart: {
                        renderTo: myObject.renderTo,
                        type: myObject.chartVal,
                        height: 300,
                        width: 600
                    },
                xAxis: {
                        categories: myObject.xaxis.Categories,
                },
                series: myObject.serList
            };

            var chart = new Highcharts.Chart(options);

        }
    });

从 $(document).ready 中可以看出,我对服务器进行了 Ajax 回调,以检索用于构造图表数据的 JSON 数据结构。

这一切都很好,除了调用似乎不是真正的异步,如果第一个面板加载缓慢,那么在第一个面板加载缓慢之后才会加载后续面板。为了演示,我在其中一个面板 DataSource 中添加了 Thread.Sleep。

我不会有这种情况,因为我正在使用 Ajax 调用。

4

1 回答 1

0

好吧,一旦我遇到类似的问题

首先尝试添加

async: true,
cache: false

给你ajax打电话

如果这不能解决您的问题,那么您需要禁用Session页面上的

<%@ Page EnableSessionState="False" ....

欲了解更多信息:

如何在 asp.netweb 应用程序中显示第一个异步结果?

REST WCF 服务在 ASP.Net 站点中使用 AJAX 调用时锁定线程

于 2012-07-25T09:08:26.177 回答