我有一个 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 调用。