2012-07-25 67 views
1

我有一个ASP.net应用程序,其中包含由各种面板组成的仪表板界面。每个面板包含一个HighChart控件,并从不同的数据源加载。某些数据源可能需要一些时间才能执行,因此我不希望由于加载数据源缓慢而导致整体页面执行速度变慢。在ASP.NET应用程序中使用jQuery异步加载面板

我希望加载页面,然后在数据准备就绪时显示每个面板。

由于我使用的是高图表,显示我有类似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); 

     } 
    }); 

如可以在$(文件)。就绪我做一个AJAX调用回服务器待观察检索用于构建图表数据的JSON数据结构。

这一切都工作正常,但调用似乎不是真正的异步,如果第一个面板加载缓慢,然后后面板不加载,直到加载缓慢的第一个面板后。为了演示我在面板DataSource中添加了一个Thread.Sleep。

虽然这是我使用Ajax调用时的情况。

回答

0

那么一次我有一个类似的问题

首先尝试添加

async: true, 
cache: false 

ajax通话

如果那么你需要禁用的的Session不解决您的问题

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

对于mo重新资讯:

How to display the Asynchronous results which one is first in asp.netweb application?

REST WCF service locks thread when called using AJAX in an ASP.Net site

+0

不幸的是我有我的网页上启用的会议是非常重要的,以我的应用程序。将async设置为true并缓存为false并不能解决我的问题。 – keitn 2012-07-25 09:28:40

+0

那么可能你应该考虑将你的PageMethods移动到服务:http://stackoverflow.com/q/11250109/1268570,我刚刚测试了上一个链接中提供的解决方案,并且它工作,即使在页面上启用了Session – Jupaol 2012-07-25 09:41:56

+0

我遇到的问题是我使用的会话信息相当多,当用户登录时会为该用户存储相当多的信息,他们在我的应用程序中所做的更改也会存储在会话中。这可能是因为我需要重组我的呼叫以传递所有相关信息作为WS呼叫 – keitn 2012-07-25 09:56:17

相关问题